scythe_codegen/
backend_trait.rs1use scythe_core::analyzer::{AnalyzedQuery, CompositeInfo, EnumInfo};
2use scythe_core::errors::ScytheError;
3
4#[derive(Debug, Clone)]
6pub struct ResolvedColumn {
7 pub name: String,
8 pub field_name: String,
9 pub lang_type: String,
10 pub full_type: String,
11 pub neutral_type: String,
12 pub nullable: bool,
13}
14
15#[derive(Debug, Clone)]
17pub struct ResolvedParam {
18 pub name: String,
19 pub field_name: String,
20 pub lang_type: String,
21 pub full_type: String,
22 pub borrowed_type: String,
23 pub neutral_type: String,
24 pub nullable: bool,
25}
26
27pub trait CodegenBackend: Send + Sync {
29 fn name(&self) -> &str;
31
32 fn generate_row_struct(
34 &self,
35 query_name: &str,
36 columns: &[ResolvedColumn],
37 ) -> Result<String, ScytheError>;
38
39 fn generate_model_struct(
41 &self,
42 table_name: &str,
43 columns: &[ResolvedColumn],
44 ) -> Result<String, ScytheError>;
45
46 fn generate_query_fn(
48 &self,
49 analyzed: &AnalyzedQuery,
50 struct_name: &str,
51 columns: &[ResolvedColumn],
52 params: &[ResolvedParam],
53 ) -> Result<String, ScytheError>;
54
55 fn generate_enum_def(&self, enum_info: &EnumInfo) -> Result<String, ScytheError>;
57
58 fn generate_composite_def(&self, composite: &CompositeInfo) -> Result<String, ScytheError>;
60
61 fn file_header(&self) -> String {
64 String::new()
65 }
66}