mirror of
https://github.com/salsa-rs/salsa.git
synced 2024-11-24 20:20:26 +00:00
67 lines
1.4 KiB
Rust
67 lines
1.4 KiB
Rust
|
use salsa::Database;
|
||
|
|
||
|
#[derive(Debug, PartialEq, Eq, Hash)]
|
||
|
pub struct Item {}
|
||
|
|
||
|
#[salsa::input]
|
||
|
pub struct Input {
|
||
|
name: String,
|
||
|
}
|
||
|
|
||
|
#[salsa::tracked]
|
||
|
impl Input {
|
||
|
#[salsa::tracked]
|
||
|
pub fn source_tree(self, db: &dyn Database) -> SourceTree<'_> {
|
||
|
SourceTree::new(db, self.name(db).clone())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[salsa::tracked]
|
||
|
pub struct SourceTree<'db> {
|
||
|
name: String,
|
||
|
}
|
||
|
|
||
|
#[salsa::tracked]
|
||
|
impl<'db1> SourceTree<'db1> {
|
||
|
#[salsa::tracked(return_ref)]
|
||
|
pub fn inherent_item_name(self, db: &'db1 dyn Database) -> String {
|
||
|
self.name(db)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
trait ItemName<'db1> {
|
||
|
fn trait_item_name(self, db: &'db1 dyn Database) -> &'db1 String;
|
||
|
}
|
||
|
|
||
|
#[salsa::tracked]
|
||
|
impl<'db1> ItemName<'db1> for SourceTree<'db1> {
|
||
|
#[salsa::tracked(return_ref)]
|
||
|
fn trait_item_name(self, db: &'db1 dyn Database) -> String {
|
||
|
self.name(db)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn test_inherent() {
|
||
|
salsa::default_database().attach(|db| {
|
||
|
let input = Input::new(db, "foo".to_string());
|
||
|
let source_tree = input.source_tree(db);
|
||
|
expect_test::expect![[r#"
|
||
|
"foo"
|
||
|
"#]]
|
||
|
.assert_debug_eq(source_tree.inherent_item_name(db));
|
||
|
})
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn test_trait() {
|
||
|
salsa::default_database().attach(|db| {
|
||
|
let input = Input::new(db, "foo".to_string());
|
||
|
let source_tree = input.source_tree(db);
|
||
|
expect_test::expect![[r#"
|
||
|
"foo"
|
||
|
"#]]
|
||
|
.assert_debug_eq(source_tree.trait_item_name(db));
|
||
|
})
|
||
|
}
|