sqlx_conditional_queries_core/
lib.rs

1#![doc = include_str!("../README.md")]
2
3pub use analyze::AnalyzeError;
4pub use expand::ExpandError;
5
6mod analyze;
7mod codegen;
8mod expand;
9mod lower;
10mod parse;
11
12#[cfg(test)]
13mod snapshot_tests;
14
15#[derive(Clone, Copy, Debug)]
16pub enum DatabaseType {
17    PostgreSql,
18    MySql,
19    Sqlite,
20}
21
22#[derive(Debug, thiserror::Error)]
23pub enum Error {
24    #[error("syn error: {0}")]
25    SynError(#[from] syn::Error),
26    #[error("analyze error: {0}")]
27    AnalyzeError(#[from] analyze::AnalyzeError),
28    #[error("expand error: {0}")]
29    ExpandError(#[from] expand::ExpandError),
30}
31
32pub fn conditional_query_as(
33    database_type: DatabaseType,
34    input: proc_macro2::TokenStream,
35) -> Result<proc_macro2::TokenStream, Error> {
36    let parsed = syn::parse2::<parse::ParsedConditionalQueryAs>(input)?;
37    let analyzed = analyze::analyze(parsed)?;
38    let lowered = lower::lower(analyzed);
39    let expanded = expand::expand(database_type, lowered)?;
40    let codegened = codegen::codegen(expanded);
41
42    Ok(codegened)
43}