id_effect_logger 0.4.0

Effect-logging service (forwards to tracing) for effect! / AsyncEffect programs
Documentation
//! Provide [`EffectLogger`] via capability [`Env`], then extract it inside
//! `effect!` with `~EffectLogger` and use its methods with `~`.
//!
//! Run: `devenv shell -- cargo run -p id_effect_logger --example context_service`

use ::id_effect::{Effect, caps, effect, provide, run_with};
use id_effect_logger::{EffectLogger, EffectLoggerError, EffectLoggerLive};

fn main() {
  tracing_subscriber::fmt()
    .with_env_filter(tracing_subscriber::EnvFilter::new("info"))
    .init();

  let prog: Effect<(), EffectLoggerError, caps!(EffectLogger)> = effect!(|r| {
    let logger = *~EffectLogger;
    ~logger.info::<caps!(EffectLogger)>("resolved EffectLogger via Env + EffectLoggerLive");
    ~logger.warn::<caps!(EffectLogger)>("warn from the same extracted logger");
  });

  run_with([provide!(EffectLoggerLive)], prog)
    .expect("EffectLoggerError is never produced by tracing");
}