mirror of
https://github.com/salsa-rs/salsa.git
synced 2025-01-12 16:35:21 +00:00
permit provider fns to be variadic as well
This commit is contained in:
parent
ed2cf2333f
commit
c0d8a08de9
2 changed files with 32 additions and 5 deletions
31
src/lib.rs
31
src/lib.rs
|
@ -228,6 +228,7 @@ macro_rules! query_group {
|
||||||
fn_path($($fn_path)*);
|
fn_path($($fn_path)*);
|
||||||
db_trait($query_trait);
|
db_trait($query_trait);
|
||||||
query_type($QueryType);
|
query_type($QueryType);
|
||||||
|
key($($key_name: $key_ty),*);
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
)*
|
)*
|
||||||
|
@ -277,6 +278,8 @@ macro_rules! query_group {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Handle fns of one argument: once parenthesized patterns are stable on beta,
|
||||||
|
// we can remove this special case.
|
||||||
(
|
(
|
||||||
@query_fn[
|
@query_fn[
|
||||||
storage($($storage:ident)*);
|
storage($($storage:ident)*);
|
||||||
|
@ -284,15 +287,39 @@ macro_rules! query_group {
|
||||||
fn_path($fn_path:path);
|
fn_path($fn_path:path);
|
||||||
db_trait($DbTrait:path);
|
db_trait($DbTrait:path);
|
||||||
query_type($QueryType:ty);
|
query_type($QueryType:ty);
|
||||||
|
key($key_name:ident: $key_ty:ty);
|
||||||
]
|
]
|
||||||
) => {
|
) => {
|
||||||
impl<DB> $crate::plumbing::QueryFunction<DB> for $QueryType
|
impl<DB> $crate::plumbing::QueryFunction<DB> for $QueryType
|
||||||
where DB: $DbTrait
|
where DB: $DbTrait
|
||||||
{
|
{
|
||||||
fn execute(db: &DB, key: <Self as $crate::Query<DB>>::Key)
|
fn execute(db: &DB, $key_name: <Self as $crate::Query<DB>>::Key)
|
||||||
-> <Self as $crate::Query<DB>>::Value
|
-> <Self as $crate::Query<DB>>::Value
|
||||||
{
|
{
|
||||||
$fn_path(db, key)
|
$fn_path(db, $key_name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Handle fns of N arguments: once parenthesized patterns are stable on beta,
|
||||||
|
// we can use this code for all cases.
|
||||||
|
(
|
||||||
|
@query_fn[
|
||||||
|
storage($($storage:ident)*);
|
||||||
|
method_name($method_name:ident);
|
||||||
|
fn_path($fn_path:path);
|
||||||
|
db_trait($DbTrait:path);
|
||||||
|
query_type($QueryType:ty);
|
||||||
|
key($($key_name:ident: $key_ty:ty),*);
|
||||||
|
]
|
||||||
|
) => {
|
||||||
|
impl<DB> $crate::plumbing::QueryFunction<DB> for $QueryType
|
||||||
|
where DB: $DbTrait
|
||||||
|
{
|
||||||
|
fn execute(db: &DB, ($($key_name),*): <Self as $crate::Query<DB>>::Key)
|
||||||
|
-> <Self as $crate::Query<DB>>::Value
|
||||||
|
{
|
||||||
|
$fn_path(db, $($key_name),*)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,7 +18,7 @@ salsa::query_group! {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn none(_db: &impl HelloWorldDatabase, (): ()) -> u32 {
|
fn none(_db: &impl HelloWorldDatabase) -> u32 {
|
||||||
22
|
22
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,11 +26,11 @@ fn one(_db: &impl HelloWorldDatabase, k: u32) -> u32 {
|
||||||
k * 2
|
k * 2
|
||||||
}
|
}
|
||||||
|
|
||||||
fn two(_db: &impl HelloWorldDatabase, (a, b): (u32, u32)) -> u32 {
|
fn two(_db: &impl HelloWorldDatabase, a: u32, b: u32) -> u32 {
|
||||||
a * b
|
a * b
|
||||||
}
|
}
|
||||||
|
|
||||||
fn trailing(_db: &impl HelloWorldDatabase, (a, b): (u32, u32)) -> u32 {
|
fn trailing(_db: &impl HelloWorldDatabase, a: u32, b: u32) -> u32 {
|
||||||
a - b
|
a - b
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue