scythe_codegen/backends/
mod.rs1pub mod csharp_npgsql;
2pub mod elixir_postgrex;
3pub mod go_pgx;
4pub mod java_jdbc;
5pub mod kotlin_jdbc;
6pub mod php_pdo;
7pub mod python_asyncpg;
8pub mod python_psycopg3;
9pub mod ruby_pg;
10pub mod sqlx;
11pub mod tokio_postgres;
12pub mod typescript_pg;
13pub mod typescript_postgres;
14
15use scythe_core::errors::{ErrorCode, ScytheError};
16
17use crate::backend_trait::CodegenBackend;
18
19pub(crate) fn clean_sql(sql: &str) -> String {
22 sql.lines()
23 .filter(|line| !line.trim_start().starts_with("--"))
24 .collect::<Vec<_>>()
25 .join("\n")
26 .trim()
27 .trim_end_matches(';')
28 .trim()
29 .to_string()
30}
31
32pub(crate) fn clean_sql_oneline(sql: &str) -> String {
34 sql.lines()
35 .filter(|line| !line.trim_start().starts_with("--"))
36 .collect::<Vec<_>>()
37 .join(" ")
38 .trim()
39 .trim_end_matches(';')
40 .trim()
41 .to_string()
42}
43
44pub fn get_backend(name: &str) -> Result<Box<dyn CodegenBackend>, ScytheError> {
46 match name {
47 "rust-sqlx" | "sqlx" | "rust" => Ok(Box::new(sqlx::SqlxBackend::new()?)),
48 "rust-tokio-postgres" | "tokio-postgres" => {
49 Ok(Box::new(tokio_postgres::TokioPostgresBackend::new()?))
50 }
51 "python-psycopg3" | "python" => {
52 Ok(Box::new(python_psycopg3::PythonPsycopg3Backend::new()?))
53 }
54 "python-asyncpg" => Ok(Box::new(python_asyncpg::PythonAsyncpgBackend::new()?)),
55 "typescript-postgres" | "ts" | "typescript" => Ok(Box::new(
56 typescript_postgres::TypescriptPostgresBackend::new()?,
57 )),
58 "typescript-pg" => Ok(Box::new(typescript_pg::TypescriptPgBackend::new()?)),
59 "go-pgx" | "go" => Ok(Box::new(go_pgx::GoPgxBackend::new()?)),
60 "java-jdbc" | "java" => Ok(Box::new(java_jdbc::JavaJdbcBackend::new()?)),
61 "kotlin-jdbc" | "kotlin" | "kt" => Ok(Box::new(kotlin_jdbc::KotlinJdbcBackend::new()?)),
62 "csharp-npgsql" | "csharp" | "c#" | "dotnet" => {
63 Ok(Box::new(csharp_npgsql::CsharpNpgsqlBackend::new()?))
64 }
65 "elixir-postgrex" | "elixir" | "ex" => {
66 Ok(Box::new(elixir_postgrex::ElixirPostgrexBackend::new()?))
67 }
68 "ruby-pg" | "ruby" | "rb" => Ok(Box::new(ruby_pg::RubyPgBackend::new()?)),
69 "php-pdo" | "php" => Ok(Box::new(php_pdo::PhpPdoBackend::new()?)),
70 _ => Err(ScytheError::new(
71 ErrorCode::InternalError,
72 format!("unknown backend: {}", name),
73 )),
74 }
75}