pub struct QueryFile {
pub queries: Vec<QueryDef>,
}Expand description
Collection of named queries from a queries.qail file
Fields§
§queries: Vec<QueryDef>Implementations§
Source§impl QueryFile
impl QueryFile
Sourcepub fn parse(input: &str) -> Result<Self, String>
pub fn parse(input: &str) -> Result<Self, String>
Parse a query file from .qail format string
Examples found in repository?
examples/test_query_parse.rs (line 26)
5fn main() {
6 let queries_content = r#"
7-- User queries
8query find_user(id: Uuid) -> User:
9 get users where id = :id
10
11query list_users() -> Vec<User>:
12 get users order by created_at desc
13
14query find_by_email(email: String) -> Option<User>:
15 get users where email = :email limit 1
16
17execute create_user(email: String, name: String):
18 add::users : email, name [ :email, :name ]
19
20execute delete_user(id: Uuid):
21 del::users where id = :id
22"#;
23
24 println!("Testing query file parsing...\n");
25
26 match QueryFile::parse(queries_content) {
27 Ok(qf) => {
28 println!("✓ Parsed {} queries\n", qf.queries.len());
29
30 for q in &qf.queries {
31 let kind = if q.is_execute { "execute" } else { "query" };
32 let params: Vec<_> = q
33 .params
34 .iter()
35 .map(|p| format!("{}: {}", p.name, p.typ))
36 .collect();
37
38 let return_type = match &q.return_type {
39 Some(qail_core::parser::query_file::ReturnType::Single(t)) => {
40 format!("-> {}", t)
41 }
42 Some(qail_core::parser::query_file::ReturnType::Vec(t)) => {
43 format!("-> Vec<{}>", t)
44 }
45 Some(qail_core::parser::query_file::ReturnType::Option(t)) => {
46 format!("-> Option<{}>", t)
47 }
48 None => String::new(),
49 };
50
51 println!("{} {}({}) {}", kind, q.name, params.join(", "), return_type);
52 println!(" body: {}", q.body.lines().next().unwrap_or(""));
53 println!();
54 }
55
56 println!("✓ All query parsing tests passed!");
57 }
58 Err(e) => {
59 eprintln!("✗ Parse error: {}", e);
60 std::process::exit(1);
61 }
62 }
63}Sourcepub fn find_query(&self, name: &str) -> Option<&QueryDef>
pub fn find_query(&self, name: &str) -> Option<&QueryDef>
Find a query by name
Trait Implementations§
Source§impl<'de> Deserialize<'de> for QueryFile
impl<'de> Deserialize<'de> for QueryFile
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations§
impl Freeze for QueryFile
impl RefUnwindSafe for QueryFile
impl Send for QueryFile
impl Sync for QueryFile
impl Unpin for QueryFile
impl UnwindSafe for QueryFile
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more