Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ra-salsa/tests/dyn_trait.rs')
| -rw-r--r-- | crates/ra-salsa/tests/dyn_trait.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/crates/ra-salsa/tests/dyn_trait.rs b/crates/ra-salsa/tests/dyn_trait.rs new file mode 100644 index 0000000000..6075ae5c11 --- /dev/null +++ b/crates/ra-salsa/tests/dyn_trait.rs @@ -0,0 +1,28 @@ +//! Test that you can implement a query using a `dyn Trait` setup. + +#[ra_salsa::database(DynTraitStorage)] +#[derive(Default)] +struct DynTraitDatabase { + storage: ra_salsa::Storage<Self>, +} + +impl ra_salsa::Database for DynTraitDatabase {} + +#[ra_salsa::query_group(DynTraitStorage)] +trait DynTrait { + #[ra_salsa::input] + fn input(&self, x: u32) -> u32; + + fn output(&self, x: u32) -> u32; +} + +fn output(db: &dyn DynTrait, x: u32) -> u32 { + db.input(x) * 2 +} + +#[test] +fn dyn_trait() { + let mut query = DynTraitDatabase::default(); + query.set_input(22, 23); + assert_eq!(query.output(22), 46); +} |