rustrust-diesel

How to make Diesel auto-generate models?


I am using this command to generate schema for Diesel:

diesel --database-url postgres://postgres:kZLxttcZSN@127.0.0.1:5432/rhythm \
migration run --config-file="${CURRENT_DIR}"/diesel-rhythm.toml

and this is the diesel.toml config:

[print_schema]
file = "src/model/diesel/rhythm/rhythm_schema.rs"

# This will cause only the users and posts tables to be output
filter = { only_tables = ["favorites", "songs", "playlist"] }

Is it possible to make Diesel auto-generate the models? The model may look like this:

#[derive(Serialize, Queryable, Deserialize, Default)]
pub struct Music {
    pub id: i64,
    pub name: String,
    pub source_id: String
}

Right now I write the models by hand. What should I do to make it generate from the Diesel CLI? I read through the documentation but did not found any useful configuration about this.


Solution

  • You are looking for diesel_cli_ext

    First install diesel_cli_ext:

    cargo install diesel_cli_ext
    

    [Then] you would have to generate your schema file the diesel way if you haven't yet:

    diesel print-schema > src/schema.rs
    

    Finally you have to generate the models file:

    diesel_ext --model > src/models.rs
    

    The models in your schema file would be generated in src/models.rs eg:

    #[derive(Queryable)]
    pub struct Music {
        pub id: i64,
        pub name: String,
        pub source_id: String
    }