materynskyis_yaml_schema_parser

Crates.iomaterynskyis_yaml_schema_parser
lib.rsmaterynskyis_yaml_schema_parser
version0.1.2
sourcesrc
created_at2024-11-03 15:27:30.169086
updated_at2024-11-13 16:33:22.613184
descriptionA YAML parser for database schema files
homepage
repository
max_upload_size
id1433865
size24,350
(volodymyr2126)

documentation

README

My YAML Parser

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.

Technical Description

The parser uses the Pest library to define grammar rules that interpret specific .yaml structures. It parses:

  • Schema name
  • Tables within the schema
  • Columns their types and modes within each table

The parsed data can be used to generate structured representation of database schemas for your application.

Example of Schema

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",
                },
            ],
        },
    ],
}
Commit count: 0

cargo fmt