Prisma Rust Schema
Usage
Binary
- Install the binary
- Add the generator config to your
.prismafile:
generator prisma_rust_schema {
provider = "prisma-rust-schema"
output = "./src/prisma"
}
- Run the generator
- Use the generated code in your Rust project:
use MyModel;
Library
This crate exports the internal TypeScript types from prisma/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::Serialize
model User {
/// User ID
/// @prs.rename = `user_id`
/// @prs.type = `usize`
/// @prs.derive = `Debug,Clone,serde::Deserialize`
id Int @id @default(autoincrement())
/// User name
/// @prs.skip
name String?
/// User emails
emails String[]
/// User age
age Int? @default(0)
}
/// Post model with only defaults
/// @prs.derive = Debug,Clone,serde::Deserialize,serde::Serialize
model post {
id Int @id @default(autoincrement())
title String
content Json
published Boolean @default(false)
publishedAt DateTime? @default(now())
}
Becomes:
pub
Constraints
This package is tested to work with prisma@^6. It does work with prisma@^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.
Currently, it is up to the user to ensure all types have valid derive attributes. Specifically, if the rename attribute is needed, then serde::Deserialize and serde::Serialize must be used. The generator will not add them automatically.