sqlx_conditional_queries_core/
lib.rs1#![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}