| Crates.io | sea-orm-typed-id |
| lib.rs | sea-orm-typed-id |
| version | 0.3.0 |
| created_at | 2024-11-10 12:14:16.564823+00 |
| updated_at | 2025-05-12 11:23:19.888785+00 |
| description | A Rust library that provides a macro for generating type-safe database ID types for SeaORM. |
| homepage | |
| repository | https://github.com/reneklacan/sea-orm-typed-id |
| max_upload_size | |
| id | 1442844 |
| size | 72,230 |
A Rust library that provides a macro for generating type-safe database ID types for SeaORM.
You might not actually need this library; it’s just a macro, and you might be better off simply copying the code from src/lib.rs into your project.
all: Enables all featuresrustls: Enables rustls TLS backend for SeaORMpostgres: Enables PostgreSQL array supportutoipa: Enables OpenAPI schema generation supportAdd this to your Cargo.toml:
[dependencies]
sea-orm-typed-id = { version = "0.2.0", features = ["all"] }
use sea_orm_typed_id::define_id;
define_id!(CakeId);
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)]
#[sea_orm(table_name = "cakes")]
pub struct Cake {
pub id: CakeId,
}
define_id!(FillingId);
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)]
#[sea_orm(table_name = "fillings")]
pub struct Filling {
pub id: FillingId,
}
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)]
#[sea_orm(table_name = "cake_fillings")]
pub struct CakeFilling {
pub cake_id: CakeId,
pub filling_id: FillingId,
}
Typed IDs won't work with postgres arrays.
// ...
pub struct Model {
// ...
pub filling_ids: Vec<FillingId>, // Doesn't work
}
This won't compile because Vec<FillingId> doesn't implement sea_orm::TryGetable which we also can't add ourselves as both Vec and sea_orm::TryGetable are external.
One of possible workouts is to make fields private and add getter for it.
// ...
pub struct Model {
// ...
filling_ids: Vec<i32>,
}
impl Model {
pub fn filling_ids(&self) -> Vec<FillingId> {
self.filling_ids.iter().map(FillingId::from).collect()
}
}
This project is licensed under the MIT License. See the LICENSE file for details.