pub(crate) mod aggregate_select;
pub(crate) mod data_input;
pub(crate) mod data_relation;
pub(crate) mod group_by_order_by;
pub(crate) mod having;
pub(crate) mod include_input;
pub(crate) mod order_by_input;
pub(crate) mod scalar_filter;
pub(crate) mod select_input;
pub(crate) mod where_input;
use prax_schema::{Model, Schema};
use proc_macro2::{Span, TokenStream};
#[allow(dead_code)]
pub struct LowerCtx<'a> {
pub schema: &'a Schema,
pub model: &'a Model,
pub crate_root: TokenStream,
}
#[allow(dead_code)]
impl<'a> LowerCtx<'a> {
pub fn new(schema: &'a Schema, model: &'a Model) -> Self {
Self {
schema,
model,
crate_root: quote::quote!(::prax),
}
}
pub fn for_model<'b>(&self, model: &'b Model) -> LowerCtx<'b>
where
'a: 'b,
{
LowerCtx {
schema: self.schema,
model,
crate_root: self.crate_root.clone(),
}
}
}
#[allow(dead_code)]
pub fn check_select_include_xor(
has_select: bool,
has_include: bool,
dup_span: Span,
) -> syn::Result<()> {
if has_select && has_include {
return Err(syn::Error::new(
dup_span,
"`select` and `include` are mutually exclusive — choose one",
));
}
Ok(())
}