Skip to main content

seam_codegen/
manifest.rs

1/* src/cli/codegen/src/manifest.rs */
2
3use std::collections::BTreeMap;
4
5use serde::{Deserialize, Serialize};
6use serde_json::Value;
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
9#[serde(rename_all = "lowercase")]
10pub enum ProcedureType {
11  Query,
12  Command,
13  Subscription,
14}
15
16impl std::fmt::Display for ProcedureType {
17  fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
18    match self {
19      Self::Query => write!(f, "query"),
20      Self::Command => write!(f, "command"),
21      Self::Subscription => write!(f, "subscription"),
22    }
23  }
24}
25
26#[derive(Debug, Serialize, Deserialize)]
27pub struct Manifest {
28  pub version: u32,
29  pub procedures: BTreeMap<String, ProcedureSchema>,
30  #[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
31  pub channels: BTreeMap<String, ChannelSchema>,
32}
33
34#[derive(Debug, Serialize, Deserialize)]
35pub struct ProcedureSchema {
36  #[serde(rename = "type")]
37  pub proc_type: ProcedureType,
38  pub input: Value,
39  pub output: Value,
40  #[serde(default, skip_serializing_if = "Option::is_none")]
41  pub error: Option<Value>,
42}
43
44#[derive(Debug, Serialize, Deserialize)]
45pub struct ChannelSchema {
46  pub input: Value,
47  pub incoming: BTreeMap<String, IncomingSchema>,
48  pub outgoing: BTreeMap<String, Value>,
49}
50
51#[derive(Debug, Serialize, Deserialize)]
52pub struct IncomingSchema {
53  pub input: Value,
54  pub output: Value,
55  #[serde(default, skip_serializing_if = "Option::is_none")]
56  pub error: Option<Value>,
57}