Crates.io | materynskyis_yaml_schema_parser |
lib.rs | materynskyis_yaml_schema_parser |
version | 0.1.2 |
source | src |
created_at | 2024-11-03 15:27:30.169086 |
updated_at | 2024-11-13 16:33:22.613184 |
description | A YAML parser for database schema files |
homepage | |
repository | |
max_upload_size | |
id | 1433865 |
size | 24,350 |
A Rust program for parsing .yaml
files that define a database schema. This parser identifies tables, and columns to allow structured interpretation of database schema files.
The parser uses the Pest library to define grammar rules that interpret specific .yaml
structures. It parses:
The parsed data can be used to generate structured representation of database schemas for your application.
Schema should be structured like this
File
└── Schema Section
├── Schema Entry
│ ├── Name: "name"
│ └── Tables
│ └── Table Section
│ ├── Table Entry
│ │ ├── Name: table_name
│ │ └── Columns
│ │ └── Column Section
│ │ ├── Column Entry
│ │ │ ├── Column Name
│ │ │ ├── Type
│ │ │ └── Mode
And generally look like this
schema:
name: myschema
tables:
user:
columns:
id:
type: int
mode: required
name:
type: str
mode: required
avg_grade:
type: float
mode: nullable
This schema could be processed like this.
file_name => {
let content = fs::read_to_string(file_name);
match content {
Ok(file_content) => match parse_schema(&file_content) {
Ok(schema) => println!("{:#?}", schema),
Err(SchemaErr::ParseError(e)) => {
eprintln!("Error while parsing the file: {}", e)
}
Err(materynskyis_yaml_schema_parser::SchemaErr::MissingValue) => {
eprintln!("Missing value");
}
},
Err(e) => eprintln!("Failed to read file '{}': {}", file_name, e),
}
}
And in result we will have this struct:
Schema {
name: "myschema",
tables: [
Table {
name: "user",
columns: [
Column {
name: "id",
datatype: "int",
mode: "required",
},
Column {
name: "name",
datatype: "str",
mode: "required",
},
Column {
name: "avg_grade",
datatype: "float",
mode: "nullable",
},
],
},
],
}