Expand description
The Setup
type.
All functionality in emit
is based on a crate::runtime::Runtime
. When you call Setup::init
, it initializes the crate::runtime::shared
runtime for you, which is also what macros use by default.
You can implement your own runtime, providing your own implementations of the ambient clock, randomness, and global context. First, disable the default features of emit
in your Cargo.toml
:
[dependencies.emit]
version = "0.11.4"
default-features = false
features = ["std"]
This will ensure the rt
control parameter is always passed to macros so that your custom runtime will always be used.
You can define your runtime as a crate::runtime::AmbientSlot
in a static and initialize it through Setup::init_slot
:
// Define a static runtime to use
// In this example, we use the default implementations of most things,
// but you can also bring-your-own
static RUNTIME: emit::runtime::AmbientSlot = emit::runtime::AmbientSlot::new();
let rt = emit::setup()
.emit_to(emit::emitter::from_fn(|evt| println!("{}", evt.msg())))
.init_slot(&RUNTIME);
// Use your runtime with the `rt` control parameter
emit::emit!(rt: RUNTIME.get(), "emitted through a custom runtime");
rt.blocking_flush(std::time::Duration::from_secs(5));
emitted through a custom runtime
The crate::runtime::AmbientSlot
is type-erased, but you can also define your own fully concrete runtimes too:
// Define a static runtime to use
// In this example, we use the default implementations of most things,
// but you can also bring-your-own
static RUNTIME: emit::runtime::Runtime<
MyEmitter,
emit::Empty,
emit::platform::thread_local_ctxt::ThreadLocalCtxt,
emit::platform::system_clock::SystemClock,
emit::platform::rand_rng::RandRng,
> = emit::runtime::Runtime::build(
MyEmitter,
emit::Empty,
emit::platform::thread_local_ctxt::ThreadLocalCtxt::shared(),
emit::platform::system_clock::SystemClock::new(),
emit::platform::rand_rng::RandRng::new(),
);
struct MyEmitter;
impl emit::Emitter for MyEmitter {
fn emit<E: emit::event::ToEvent>(&self, evt: E) {
println!("{}", evt.to_event().msg());
}
fn blocking_flush(&self, _: std::time::Duration) -> bool {
// Nothing to flush
true
}
}
// Use your runtime with the `rt` control parameter
emit::emit!(rt: &RUNTIME, "emitted through a custom runtime");
emitted through a custom runtime
Re-exports§
pub use platform::DefaultClock;
pub use platform::DefaultCtxt;
pub use platform::DefaultRng;
Structs§
- The result of calling
Setup::init
. - The result of calling
Init::flush_on_drop
. - A configuration builder for an
emit
runtime.