| Crates.io | diesel-derive-composite |
| lib.rs | diesel-derive-composite |
| version | 0.1.0 |
| created_at | 2025-10-16 22:35:28.099645+00 |
| updated_at | 2025-10-16 22:35:28.099645+00 |
| description | Derive diesel traits for PostgreSQL composite types |
| homepage | |
| repository | https://github.com/19wintersp/diesel-derive-composite |
| max_upload_size | |
| id | 1886880 |
| size | 29,159 |
Derive diesel traits for PostgreSQL composite types.
Generates boilerplate implementations of ToSql and FromSql for enums and
structs representing PostgreSQL composite types. Works with Diesel 2.3.
Licensed under the MIT or Apache 2.0 licence.
For example, consider composite types declared as follows:
create type my_enum as enum (
'variant_one',
'variant_two'
);
create type my_struct as (
field_one text,
field_two my_enum
);
From this schema, the Diesel CLI may generate stub types:
// @generated automatically by Diesel CLI.
pub mod sql_types {
#[derive(diesel::query_builder::QueryId, Clone, diesel::sql_types::SqlType)]
#[diesel(postgres_type(name = "my_enum"))]
pub struct MyEnum;
#[derive(diesel::query_builder::QueryId, Clone, diesel::sql_types::SqlType)]
#[diesel(postgres_type(name = "my_struct"))]
pub struct MyStruct;
}
To generate model types which work with these types, derive Composite:
use diesel::deserialize::FromSqlRow;
use diesel::expression::AsExpression;
use diesel_derive_composite::Composite;
#[derive(Debug, Composite, FromSqlRow, AsExpression)]
#[diesel(sql_type = schema::sql_types::MyEnum)]
enum MyEnum {
VariantOne,
VariantTwo,
}
#[derive(Debug, Composite, FromSqlRow, AsExpression)]
#[diesel(sql_type = schema::sql_types::MyStruct)]
struct MyStruct {
#[diesel_composite(sql_type = diesel::sql_types::Text)]
field_one: String,
#[diesel_composite(sql_type = schema::sql_types::MyEnum)]
field_two: MyEnum,
}
If the schema types are not generated by Diesel, Composite can generate them
instead:
#[derive(Debug, Composite, FromSqlRow, AsExpression)]
#[diesel(sql_type = PgMyEnum)]
#[diesel_composite(postgres_type(name = "my_enum"))]
enum MyEnum {
VariantOne,
VariantTwo,
}
#[derive(Debug, Composite, FromSqlRow, AsExpression)]
#[diesel(sql_type = PgMyStruct)]
#[diesel_composite(postgres_type(name = "my_struct"))]
struct MyStruct {
#[diesel_composite(sql_type = diesel::sql_types::Text)]
field_one: String,
#[diesel_composite(sql_type = PgMyEnum)]
field_two: MyEnum,
}
For a full list of options, see the documentation for Composite.