proof_of_sql_parser/
lib.rs1#![doc = include_str!("../README.md")]
2#![no_std]
3#![cfg_attr(test, expect(clippy::missing_panics_doc))]
4extern crate alloc;
5
6pub mod posql_time;
8#[macro_use]
9extern crate lalrpop_util;
10
11pub mod intermediate_ast;
12
13#[cfg(test)]
14mod intermediate_ast_tests;
15
16pub mod utility;
18
19pub(crate) mod select_statement;
21pub use select_statement::SelectStatement;
22
23pub mod error;
25pub use error::ParseError;
26pub(crate) use error::ParseResult;
27
28pub(crate) mod identifier;
30pub use identifier::Identifier;
31
32pub mod resource_id;
33pub use resource_id::ResourceId;
34
35pub mod sqlparser;
36
37lalrpop_mod!(#[expect(clippy::all, missing_docs, clippy::pedantic, clippy::missing_panics_doc, clippy::allow_attributes, reason = "lalrpop-generated code can not be expected to be clippy-compliant or use expect")] pub sql);
39
40#[macro_export]
42macro_rules! impl_serde_from_str {
43 ($type:ty) => {
44 impl serde::Serialize for $type {
45 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
46 where
47 S: serde::Serializer,
48 {
49 serializer.serialize_str(&self.to_string())
50 }
51 }
52 impl<'d> serde::Deserialize<'d> for $type {
53 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
54 where
55 D: serde::Deserializer<'d>,
56 {
57 extern crate alloc;
58 let string = alloc::string::String::deserialize(deserializer)?;
59 <$type>::from_str(&string).map_err(serde::de::Error::custom)
60 }
61 }
62 };
63}