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 runtimeThe 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 runtimeRe-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
emitruntime.