summaryrefslogtreecommitdiffstats
path: root/vendor/rust-analyzer-salsa/tests/dyn_trait.rs
blob: 1ee8fb83cf383f30bdf950189560dc8ac57ccf3d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//! Test that you can implement a query using a `dyn Trait` setup.

#[salsa::database(DynTraitStorage)]
#[derive(Default)]
struct DynTraitDatabase {
    storage: salsa::Storage<Self>,
}

impl salsa::Database for DynTraitDatabase {}

#[salsa::query_group(DynTraitStorage)]
trait DynTrait {
    #[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);
}