You signed in with another tab or window.Reload to refresh your session.You signed out in another tab or window.Reload to refresh your session.You switched accounts on another tab or window.Reload to refresh your session.Dismiss alert
use prisma_rust_schema::import_types;// Relative to `Cargo.toml`import_types!("./prisma/schema.prisma");// Or, use import options:import_types!( schema_paths =["./prisma/schema.prisma"], derive =[Debug,Clone, serde::Deserialize, serde::Serialize],// Optional, defaults to no derive include =["User","Post"],// Optional, defaults to all models prefix ="MyPrefix",// Optional, defaults to no prefix patch =[structMyPrefixUser{ existing_field:MyPrefixPost}]);// If `schema_path` implements `IntoUrl`, it is fetched.import_types!("https://raw.githubusercontent.com/ShaunSHamilton/prisma-rust-schema/refs/heads/master/prisma/schema.prisma");
Options
Option
Example
Description
@prs.rename = <new_name>
@prs.rename = username
Rename the field in the generated Rust struct.
@prs.skip
@prs.skip
Skip the field in the generated Rust struct.
@prs.type = <type_override>
@prs.type = usize
Override the type of the field in the generated Rust struct.
@prs.visibility = <visibility>
@prs.visibility = public
Override the visibility (public, private, protected) of the field in the generated Rust struct.
@prs.derive = <trait>
@prs.derive = Debug,Clone,serde::Deserialize
Fully-qualified, comma-separated derive attributes for the generated Rust struct.
Example
/// User model documentation/// @prs.visibility = protected/// @prs.derive = Debug,Clone,serde::Deserialize,serde::SerializemodelUser {/// User ID/// @prs.rename = `user_id`/// @prs.type = `usize`idInt@id@default(autoincrement())/// User name/// @prs.skipnameString?/// User emailsemailsString[]/// User ageageInt?@default(0)}/// Post model with only defaults/// @prs.derive = Debug,Clone,serde::Deserialize,serde::Serializemodelpost {idInt@id@default(autoincrement())titleStringcontentJsonpublishedBoolean@default(false)publishedAtDateTime?@default(now())}
Becomes:
#[doc ="User model documentation"]#[derive(Debug,Clone, serde::Deserialize, serde::Serialize)]pub(crate)structUser{#[doc ="User ID"]#[serde(rename ="user")]pub(crate)user_id:usize,#[doc ="User emails"]pub(crate)emails:Vec<String>,/// User agepub(crate)age:Option<i32>,}#[doc ="Post model with only defaults"]#[derive(Debug,Clone, serde::Deserialize, serde::Serialize)]pubstructPost{pubid:i32,pubtitle:String,pubcontent: serde_json::Value,pubpublished:bool,pubpublished_at:Option<chrono::DateTime<chrono::Utc>>,}
Constraints
This package is tested to work withprisma@^6. It does work withprisma@^5 but there are no native types such as@db.ObjectId. So,@prs.type must be used, otherwise the type will be the.prisma type.
Version
Prisma Schema
Rust Type
5.x
model User { id @db.ObjectId}
pub struct User { id: String}
6.x
model User { id @db.ObjectId}
pub struct User { id: bson::oid::ObjectId}
Currently, it is up tothe user to ensure all types have valid derive attributes. Specifically, if therename attribute is needed, thenserde::Deserialize andserde::Serialize must be used. The generator will not add them automatically.
About
A Rust proc macro to generate Rust code from Prisma schema files.