use reifydb_type::value::{constraint::TypeConstraint, sumtype::VariantRef};
use serde::{Deserialize, Serialize};
use crate::interface::catalog::id::{NamespaceId, ProcedureId};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum ProcedureTrigger {
Call,
Event {
variant: VariantRef,
},
NativeCall {
native_name: String,
},
}
impl Default for ProcedureTrigger {
fn default() -> Self {
ProcedureTrigger::Call
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Procedure {
pub id: ProcedureId,
pub namespace: NamespaceId,
pub name: String,
pub params: Vec<ProcedureParam>,
pub return_type: Option<TypeConstraint>,
pub body: String,
pub trigger: ProcedureTrigger,
pub is_test: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ProcedureParam {
pub name: String,
pub param_type: TypeConstraint,
}