pub trait CodegenBackend: Send + Sync {
Show 13 methods
// Required methods
fn name(&self) -> &str;
fn manifest(&self) -> &BackendManifest;
fn generate_row_struct(
&self,
query_name: &str,
columns: &[ResolvedColumn],
) -> Result<String, ScytheError>;
fn generate_model_struct(
&self,
table_name: &str,
columns: &[ResolvedColumn],
) -> Result<String, ScytheError>;
fn generate_query_fn(
&self,
analyzed: &AnalyzedQuery,
struct_name: &str,
columns: &[ResolvedColumn],
params: &[ResolvedParam],
) -> Result<String, ScytheError>;
fn generate_enum_def(
&self,
enum_info: &EnumInfo,
) -> Result<String, ScytheError>;
fn generate_composite_def(
&self,
composite: &CompositeInfo,
) -> Result<String, ScytheError>;
// Provided methods
fn file_header(&self) -> String { ... }
fn file_footer(&self) -> String { ... }
fn query_class_header(&self) -> String { ... }
fn generate_rbs_file(
&self,
_context: &RbsGenerationContext,
) -> Option<String> { ... }
fn apply_options(
&mut self,
_options: &HashMap<String, String>,
) -> Result<(), ScytheError> { ... }
fn supported_engines(&self) -> &[&str] { ... }
}Expand description
Trait that all codegen backends must implement.
Required Methods§
Sourcefn manifest(&self) -> &BackendManifest
fn manifest(&self) -> &BackendManifest
The backend’s manifest (type mappings, naming conventions, etc).
Sourcefn generate_row_struct(
&self,
query_name: &str,
columns: &[ResolvedColumn],
) -> Result<String, ScytheError>
fn generate_row_struct( &self, query_name: &str, columns: &[ResolvedColumn], ) -> Result<String, ScytheError>
Generate a row struct for a query result.
Sourcefn generate_model_struct(
&self,
table_name: &str,
columns: &[ResolvedColumn],
) -> Result<String, ScytheError>
fn generate_model_struct( &self, table_name: &str, columns: &[ResolvedColumn], ) -> Result<String, ScytheError>
Generate a model struct for a table.
Sourcefn generate_query_fn(
&self,
analyzed: &AnalyzedQuery,
struct_name: &str,
columns: &[ResolvedColumn],
params: &[ResolvedParam],
) -> Result<String, ScytheError>
fn generate_query_fn( &self, analyzed: &AnalyzedQuery, struct_name: &str, columns: &[ResolvedColumn], params: &[ResolvedParam], ) -> Result<String, ScytheError>
Generate a query function.
Sourcefn generate_enum_def(&self, enum_info: &EnumInfo) -> Result<String, ScytheError>
fn generate_enum_def(&self, enum_info: &EnumInfo) -> Result<String, ScytheError>
Generate an enum definition.
Sourcefn generate_composite_def(
&self,
composite: &CompositeInfo,
) -> Result<String, ScytheError>
fn generate_composite_def( &self, composite: &CompositeInfo, ) -> Result<String, ScytheError>
Generate a composite type definition.
Provided Methods§
Sourcefn file_header(&self) -> String
fn file_header(&self) -> String
Generate a file-level header (imports, docstring, etc). Returns an empty string by default; backends may override.
Generate a file-level footer (closing braces, etc). Returns an empty string by default; backends may override.
Sourcefn query_class_header(&self) -> String
fn query_class_header(&self) -> String
Generate a class header that wraps query functions only. When non-empty, the assembly will emit all type definitions (enums, row structs, model structs) first, then this class header, then all query functions, then the file footer. Returns an empty string by default (no class wrapper).
Sourcefn generate_rbs_file(&self, _context: &RbsGenerationContext) -> Option<String>
fn generate_rbs_file(&self, _context: &RbsGenerationContext) -> Option<String>
Generate an RBS type signature file for Ruby backends.
Returns None by default; Ruby backends override this.
Sourcefn apply_options(
&mut self,
_options: &HashMap<String, String>,
) -> Result<(), ScytheError>
fn apply_options( &mut self, _options: &HashMap<String, String>, ) -> Result<(), ScytheError>
Apply per-backend configuration options from [[sql.gen]].
Backends override this to handle options like row_type = "pydantic".
Sourcefn supported_engines(&self) -> &[&str]
fn supported_engines(&self) -> &[&str]
Database engines this backend supports. Defaults to PostgreSQL only. Multi-DB backends override this.