Skip to main content

graphforge_ir/
procedure.rs

1//! Procedure signatures and deterministic procedure fixtures.
2
3use std::collections::HashMap;
4
5use serde::{Deserialize, Serialize};
6
7use crate::{IrLiteral, VarId};
8
9/// A named value in a procedure signature.
10#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
11pub struct ProcedureField {
12    /// Field name used for implicit arguments or yielded values.
13    pub name: String,
14    /// openCypher type name, retained for compile-time validation.
15    pub type_name: String,
16    /// Whether the field accepts null.
17    pub nullable: bool,
18}
19
20/// A deterministic procedure definition used by query planning and the TCK.
21#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
22pub struct ProcedureDefinition {
23    /// Fully-qualified procedure name.
24    pub name: String,
25    /// Ordered input signature.
26    pub inputs: Vec<ProcedureField>,
27    /// Ordered output signature.
28    pub outputs: Vec<ProcedureField>,
29    /// Fixture rows containing all inputs followed by all outputs.
30    pub rows: Vec<Vec<IrLiteral>>,
31}
32
33/// Procedure definitions keyed by fully-qualified name.
34pub type ProcedureRegistry = HashMap<String, ProcedureDefinition>;
35
36/// One output selected by a `YIELD` list.
37#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
38pub struct ProcedureYield {
39    /// Name in the registered procedure output signature.
40    pub field: String,
41    /// Query-visible name after an optional `AS` alias.
42    pub alias: String,
43    /// Variable introduced into the downstream query scope.
44    pub var: VarId,
45}