// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef BASE_TASK_SEQUENCED_TASK_RUNNER_RUST_SHIM_H_
#define BASE_TASK_SEQUENCED_TASK_RUNNER_RUST_SHIM_H_

#include "third_party/rust/cxx/v1/cxx.h"

namespace base {

class SequencedTaskRunner;
struct RustOnceClosure;

// Return a raw pointer to the current default SequencedTaskRunner, since we
// can't pass scoped_refptr to rust directly.
SequencedTaskRunner* GetCurrentDefaultSequencedTaskRunnerForRust();

// Post a task to the given runner
bool PostTaskFromRust(SequencedTaskRunner& runner,
                      rust::Box<base::RustOnceClosure> task);

// Expose ref-counting to Rust
void AddRef(const SequencedTaskRunner& runner);
void Release(const SequencedTaskRunner& runner);

// Check if we're currently on this runner's sequence
bool RunsTasksInCurrentSequence(const SequencedTaskRunner& runner);

}  // namespace base

#endif  // BASE_TASK_SEQUENCED_TASK_RUNNER_RUST_SHIM_H_
