use ::effectful::{Cons, Context, Effect, LayerBuild, Nil, Service, effect, run_blocking};
use effectful_logger::{EffectLogKey, EffectLogger, EffectLoggerError, layer_effect_logger};
type LogEnv = Context<Cons<Service<EffectLogKey, EffectLogger>, Nil>>;
fn build_env() -> LogEnv {
let cell = layer_effect_logger()
.build()
.expect("layer_effect_logger is infallible");
Context::new(Cons(cell, Nil))
}
fn main() {
tracing_subscriber::fmt()
.with_env_filter(tracing_subscriber::EnvFilter::new("info"))
.init();
let prog: Effect<(), EffectLoggerError, LogEnv> = effect!(|_r: &mut LogEnv| {
let logger = bind * EffectLogger;
bind * logger.info("logger provided via layer_effect_logger build");
});
let result: Result<(), EffectLoggerError> = run_blocking(prog, build_env());
println!("{result:?}");
}