use effectful::{
ContextService, Effect, IntoServiceContext, MissingService, Service, ServiceContext,
run_blocking,
};
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash, Service)]
struct Config {
port: u16,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash, Service)]
struct Db {
id: u8,
}
fn main() {
let static_ctx = effectful::ctx!(
Config => Config { port: 8080 },
Db => Db { id: 1 },
);
let svc_ctx: ServiceContext = static_ctx.into_service_context();
let program: Effect<u16, MissingService, ServiceContext> =
Config::use_sync(|config| config.port);
assert_eq!(run_blocking(program, svc_ctx.clone()), Ok(8080));
let config = svc_ctx.get_cloned::<Config>().expect("Config present");
assert_eq!(config.port, 8080);
let db = svc_ctx.get_cloned::<Db>().expect("Db present");
assert_eq!(db.id, 1);
println!("108_context_service_context_interop ok");
}