Compare commits

...

2 Commits

3 changed files with 18 additions and 7 deletions

View File

@ -1,6 +1,6 @@
[package]
name = "ql"
version = "0.2.0"
version = "0.2.1"
edition = "2021"
license = "MIT OR Apache-2.0"

View File

@ -14,6 +14,10 @@ pub trait DynamicQuery {
}
}
// needed for macros
#[doc(hidden)]
pub use paste;
mod macros;
#[cfg(test)]

View File

@ -1,3 +1,6 @@
use paste;
#[doc(hidden)]
#[macro_export]
macro_rules! query_def_type {
(@ ($type:ty)) => {
@ -14,6 +17,7 @@ macro_rules! query_def_type {
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! query_def_field {
(@dyn $type:ty) => {
@ -33,6 +37,7 @@ macro_rules! query_def_field {
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! query_def_filter {
// note about this: 'dyn is implied for 'vec and 'map because if the type is not 'dyn, then the
@ -79,6 +84,7 @@ macro_rules! query_def_filter {
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! query_def_internal_struct {
(@
@ -110,7 +116,7 @@ macro_rules! query_def_internal_struct {
)+
}
::paste::paste! {
$crate::paste::paste! {
#[derive(Debug, Clone, Copy, Default)]
$( $( #[$def_meta] )+ )?
$vis struct [<$data Def>] {
@ -121,7 +127,7 @@ macro_rules! query_def_internal_struct {
}
impl $crate::DynamicQuery for $data {
type Definition = ::paste::paste! { [<$data Def>] };
type Definition = $crate::paste::paste! { [<$data Def>] };
fn filter_ref(&mut self, def: &Self::Definition) {
$(
@ -137,6 +143,7 @@ macro_rules! query_def_internal_struct {
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! query_def_internal_enum {
(@
@ -181,7 +188,7 @@ macro_rules! query_def_internal_enum {
),+
}
::paste::paste! {
$crate::paste::paste! {
#[derive(Debug, Clone, Copy, Default)]
$( $( #[$def_meta] )+ )?
$vis struct [<$data Def>] {
@ -191,7 +198,7 @@ macro_rules! query_def_internal_enum {
}
}
::paste::paste! {
$crate::paste::paste! {
// impl [<$data Def>] {
// $(
// pub type $variant = [<$data Def Variant $variant>];
@ -210,13 +217,13 @@ macro_rules! query_def_internal_enum {
}
impl $crate::DynamicQuery for $data {
type Definition = ::paste::paste! { [<$data Def>] };
type Definition = $crate::paste::paste! { [<$data Def>] };
fn filter_ref(&mut self, def: &Self::Definition) {
match self {
$(
Self::$variant { $( ref mut $field ),+ } => {
let def = ::paste::paste! { &def.[<$variant:snake:lower>] };
let def = $crate::paste::paste! { &def.[<$variant:snake:lower>] };
$(
let query = &def.$field;
$crate::query_def_filter!(@ query, $field, $($qualifier)? ($($type)+));