use effect_rs::{Effect, Env, EnvRef, Exit, Layer, Runtime};
#[derive(Clone)]
struct Database {
url: String,
}
#[derive(Clone)]
#[allow(dead_code)]
struct Config {
port: i32,
}
#[test]
fn test_layer_provide() {
let rt = Runtime::new();
let db_layer: Layer<(), (), Database> = Layer::<(), (), ()>::succeed(Database {
url: "postgres://".to_string(),
});
let program = Effect::access_async(|env: EnvRef<Env>, _| {
let db = env.value.get::<Database>().unwrap();
let url = db.url.clone();
async move { url }
});
let provided = db_layer.provide_to(program);
let result = rt.block_on(provided, ());
match result {
Exit::Success(val) => assert_eq!(val, "postgres://"),
Exit::Failure(_) => panic!("Expected success"),
}
}