#mysql #table #structure #generate #template #directory

app rbatis-tools

Generate the RUST structure based on the MySQL table structure

12 releases

0.1.19 May 24, 2022
0.1.18 May 24, 2022
0.1.17 Feb 8, 2022
0.1.16 Jan 26, 2022
0.1.10 Jun 29, 2021

#1991 in Database interfaces

40 downloads per month

MIT/Apache

27KB
415 lines

New package supports Mysql and PostgresSQL...

Version info Downloads docs dependency status B站

Install

cargo install sql_reverse

rbatis-tools

Generate the RUST structure based on the MySQL table structure

Version info Downloads docs dependency status

Install

cargo install rbatis-tools

Exec,you need to make sure you're in the same directory as templates.

rbatis-tools mysql -f reverse.yml

Custom Exec

rbatis-tools mysql -f reverse.yml -p 'templates/*' -n base.tera

reverse.yml

database: db_name
conn_str: root:password@127.0.0.1:3306/db_name
include_tables: # Include tables, can be ignored.
#  - table_name
exclude_tables: # Exclude, tables, can be ignored.
#  - table_name
output_dir: ./dir # code output directory

Template Struct:

#[derive(Serialize)]
pub struct Template {
    pub table_name: String,
    pub struct_name: String,
    pub fields: Vec<Field>, 
    pub comment: String,
}

#[derive(Serialize, Clone)]
pub struct Field {
    pub field_name: String,
    pub field_type: String,
    pub comment: String,
    /// NO, YES
    pub is_null: String,
}

Template:

use serde_derive;
use chrono::prelude::*;

{% if template.comment -%}
    /// {{ template.comment }}
{% endif -%}
#[crud_table]
#[derive(Default, Debug, Clone, PartialEq, serde_derive::Serialize, serde_derive::Deserialize)]
pub struct {{ template.struct_name }} {
{%- for v in template.fields %}
    {% if v.comment -%}
        /// {{ v.comment }}
    {% endif -%}
    pub {{ v.field_name }}: Option<{{ v.field_type }}>,
{%- endfor %}
}

Gen Struct Example:

use serde_derive;
use chrono::prelude::*;

/// Test
#[crud_table]
#[derive(Default, Debug, Clone, PartialEq, serde_derive::Serialize, serde_derive::Deserialize)
pub struct Test {
    pub id: Option<u32>,
    /// uuid
    pub uuid: Option<String>,
    /// 数据
    pub content: Option<String>,
    /// 版本
    pub version: Option<i8>,
    /// 1:删除, 0:未删除
    pub is_deleted: Option<u8>,
    /// 更新时间
    pub updated_at: Option<NaiveDateTime>,
    /// 创建时间
    pub created_at: Option<NaiveDateTime>,
}

Dependencies

~26–40MB
~665K SLoC