use serde::{Deserialize, Serialize};
use serde_json::value::RawValue;
use serde_json::Value;
fn default_true() -> bool {
true
}
pub const ENGINE_HANDSHAKE: &str = "engine.handshake";
pub const QUERY_FIND_MANY: &str = "query.findMany";
pub const QUERY_FIND_FIRST: &str = "query.findFirst";
pub const QUERY_FIND_UNIQUE: &str = "query.findUnique";
pub const QUERY_FIND_UNIQUE_OR_THROW: &str = "query.findUniqueOrThrow";
pub const QUERY_FIND_FIRST_OR_THROW: &str = "query.findFirstOrThrow";
pub const QUERY_CREATE: &str = "query.create";
pub const QUERY_CREATE_MANY: &str = "query.createMany";
pub const QUERY_UPDATE: &str = "query.update";
pub const QUERY_DELETE: &str = "query.delete";
pub const QUERY_COUNT: &str = "query.count";
pub const QUERY_GROUP_BY: &str = "query.groupBy";
pub const SCHEMA_VALIDATE: &str = "schema.validate";
pub const TRANSACTION_START: &str = "transaction.start";
pub const TRANSACTION_COMMIT: &str = "transaction.commit";
pub const TRANSACTION_ROLLBACK: &str = "transaction.rollback";
pub const TRANSACTION_BATCH: &str = "transaction.batch";
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HandshakeParams {
pub protocol_version: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_version: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HandshakeResult {
pub engine_version: String,
pub protocol_version: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FindManyParams {
pub protocol_version: u32,
pub model: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub args: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub chunk_size: Option<usize>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FindFirstParams {
pub protocol_version: u32,
pub model: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub args: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FindUniqueParams {
pub protocol_version: u32,
pub model: String,
pub filter: Value,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_id: Option<String>,
}
pub type FindUniqueOrThrowParams = FindUniqueParams;
pub type FindFirstOrThrowParams = FindFirstParams;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateParams {
pub protocol_version: u32,
pub model: String,
pub data: Value,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_id: Option<String>,
#[serde(default = "default_true")]
pub return_data: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateManyParams {
pub protocol_version: u32,
pub model: String,
pub data: Vec<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_id: Option<String>,
#[serde(default = "default_true")]
pub return_data: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateParams {
pub protocol_version: u32,
pub model: String,
pub filter: Value,
pub data: Value,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_id: Option<String>,
#[serde(default = "default_true")]
pub return_data: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DeleteParams {
pub protocol_version: u32,
pub model: String,
pub filter: Value,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_id: Option<String>,
#[serde(default = "default_true")]
pub return_data: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CountParams {
pub protocol_version: u32,
pub model: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub args: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GroupByParams {
pub protocol_version: u32,
pub model: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub args: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryResult {
pub data: Vec<Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MutationResult {
pub count: usize,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<Vec<Value>>,
}
pub const QUERY_RAW: &str = "query.rawQuery";
pub const QUERY_RAW_STMT: &str = "query.rawStmtQuery";
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RawQueryParams {
pub protocol_version: u32,
pub sql: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RawStmtQueryParams {
pub protocol_version: u32,
pub sql: String,
#[serde(default)]
pub params: Vec<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SchemaValidateParams {
pub protocol_version: u32,
pub schema: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SchemaValidateResult {
pub valid: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub errors: Option<Vec<String>>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum IsolationLevel {
ReadUncommitted,
ReadCommitted,
RepeatableRead,
Serializable,
}
impl IsolationLevel {
pub fn as_sql(&self) -> &'static str {
match self {
IsolationLevel::ReadUncommitted => "READ UNCOMMITTED",
IsolationLevel::ReadCommitted => "READ COMMITTED",
IsolationLevel::RepeatableRead => "REPEATABLE READ",
IsolationLevel::Serializable => "SERIALIZABLE",
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TransactionStartParams {
pub protocol_version: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub timeout_ms: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub isolation_level: Option<IsolationLevel>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TransactionStartResult {
pub id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TransactionCommitParams {
pub protocol_version: u32,
pub id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TransactionCommitResult {}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TransactionRollbackParams {
pub protocol_version: u32,
pub id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TransactionRollbackResult {}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BatchOperation {
pub method: String,
pub params: Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TransactionBatchParams {
pub protocol_version: u32,
pub operations: Vec<BatchOperation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub isolation_level: Option<IsolationLevel>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timeout_ms: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TransactionBatchResult {
pub results: Vec<Box<RawValue>>,
}