]>
git.proxmox.com Git - rustc.git/blob - vendor/salsa/tests/requires.rs
1 //! Test `salsa::requires` attribute for private query dependencies
2 //! https://github.com/salsa-rs/salsa-rfcs/pull/3
5 #[salsa::query_group(InputGroupStorage)]
8 fn input(&self, x
: u32) -> u32;
11 #[salsa::query_group(PrivGroupAStorage)]
12 pub trait PrivGroupA
: InputGroup
{
13 fn private_a(&self, x
: u32) -> u32;
16 fn private_a(db
: &impl PrivGroupA
, x
: u32) -> u32 {
20 #[salsa::query_group(PrivGroupBStorage)]
21 pub trait PrivGroupB
: InputGroup
{
22 fn private_b(&self, x
: u32) -> u32;
25 fn private_b(db
: &impl PrivGroupB
, x
: u32) -> u32 {
29 #[salsa::query_group(PubGroupStorage)]
30 #[salsa::requires(PrivGroupA)]
31 #[salsa::requires(PrivGroupB)]
32 pub trait PubGroup
: InputGroup
{
33 fn public(&self, x
: u32) -> u32;
36 fn public(db
: &(impl PubGroup
+ PrivGroupA
+ PrivGroupB
), x
: u32) -> u32 {
37 db
.private_a(x
) + db
.private_b(x
)
42 queries
::InputGroupStorage
,
43 queries
::PrivGroupAStorage
,
44 queries
::PrivGroupBStorage
,
45 queries
::PubGroupStorage
49 runtime
: salsa
::Runtime
<Database
>,
52 impl salsa
::Database
for Database
{
53 fn salsa_runtime(&self) -> &salsa
::Runtime
<Self> {
57 fn salsa_runtime_mut(&mut self) -> &mut salsa
::Runtime
<Self> {
63 fn require_clauses_work() {
64 use queries
::{InputGroup, PubGroup}
;
65 let mut db
= Database
::default();
68 assert_eq
!(db
.public(1), 20);