Expand description
Multi-database schema-to-Rust compiler pipeline.
Introspects a live PostgreSQL, MySQL/MariaDB, or SQLite database, normalises
column types into a database-agnostic Intermediate Representation
(SchemaIR), and generates strongly typed Rust model structs.
§Pipeline
- Introspect — reads schema metadata via
DatabaseIntrospector - Normalise — raw column types map to
DbType; fields, tables, constraints, enums, and indexes collect intoSchemaIR - Generate —
SchemaIRis consumed bygenerate()which returns aGeneratedOutputcontaining file contents; the CLI writes them viaOutputWriter
§Quick start (programmatic)
use neutrino_schema::*;
let tables = vec![
TableIR {
name: "users".into(),
fields: vec![FieldIR {
name: "email".into(),
ty: DbType::String,
nullable: false,
raw_type: "Varchar".into(),
default_value: None,
generated: false,
comment: None,
}],
constraints: vec![],
comment: None,
indexes: vec![],
},
];
let schema = SchemaIR::from_tables(tables, RelationStrategy::NamingHeuristic);
let output = generate(&schema, &GenerateOptions::default());
let generated = output.file("users.rs").map(|f| &f.content[..]).unwrap_or("");
assert!(generated.contains("pub struct Users"));§Quick start (CLI)
# First run — creates neutrino-schema.toml
neutrino-schema generate
# → prompts for database URL, saves it, generates types
# Subsequent runs — just works from config
neutrino-schema generate
# Explicit setup (CI / scripting)
neutrino-schema init --database-url "postgres://localhost/mydb"
neutrino-schema generate
# All flags still work
neutrino-schema generate --database-url "mysql://user:pass@localhost/mydb" --output src/entitiesRe-exports§
pub use codegen::generate;pub use codegen::generate_enum_defs;pub use codegen::generate_files;pub use codegen::generate_files_with_registry;pub use codegen::generate_imports;pub use codegen::generate_struct;pub use codegen::GenerateOptions;pub use codegen::GeneratedFile;pub use codegen::GeneratedOutput;pub use codegen::OutputWriter;pub use codegen::RenderMode;pub use codegen::RustGeneratorConfig;pub use ir::ConstraintIR;pub use ir::ConstraintKind;pub use ir::EnumIR;pub use ir::EnumVariantIR;pub use ir::FieldIR;pub use ir::IndexEntryIR;pub use ir::IndexIR;pub use ir::IndexKind;pub use ir::MatchType;pub use ir::ReferentialAction;pub use ir::RelationCardinality;pub use ir::RelationIR;pub use ir::RelationInferenceStrategy;pub use ir::RelationOrigin;pub use ir::RelationStrategy;pub use ir::SchemaIR;pub use ir::SemanticRelationIR;pub use ir::TableIR;pub use validation::validate;pub use validation::ValidationEntry;pub use validation::ValidationLevel;pub use validation::ValidationReport;pub use types::dbtype_to_rust;pub use types::mysql_to_db_type;pub use types::sqlite_declared_to_db_type;pub use types::sqlite_to_db_type;pub use types::to_db_type;pub use types::DbType;pub use types::EnumRef;pub use types::MysqlType;pub use types::PgType;pub use types::RustType;pub use types::SqliteType;pub use types::TypeRegistry;pub use util::naming::deduplicate_identifier;pub use util::naming::enum_variant_name;pub use util::naming::sanitize_identifier;pub use util::naming::to_struct_name;pub use introspect::Column;pub use introspect::DatabaseIntrospector;pub use introspect::PostgresIntrospector;pub use introspect::SqliteIntrospector;pub use introspect::MysqlIntrospector;
Modules§
- cli
- CLI entry points for the
neutrino-schemabinary. - codegen
- Rust source code generation from
SchemaIR. - config
- Configuration for the code generation pipeline.
- inference
- Relation inference engine.
- introspect
- Database introspection — reads live schema metadata.
- ir
- Intermediate Representation (IR) — schema-agnostic model for code generation.
- types
- Database type representation and normalisation.
- util
- validation
- Semantic validation for
SchemaIRdocuments.