canon_protocol/
specification.rs1use serde::{Deserialize, Serialize};
2use serde_yaml::Value;
3use std::collections::HashMap;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct CanonSpecification {
12 pub canon: String,
14
15 pub r#type: String,
21
22 pub metadata: SpecificationMetadata,
24
25 #[serde(skip_serializing_if = "Option::is_none")]
27 pub includes: Option<Vec<String>>,
28
29 #[serde(skip_serializing_if = "Option::is_none")]
31 pub schema: Option<HashMap<String, SchemaField>>,
32
33 #[serde(flatten)]
35 pub content: HashMap<String, Value>,
36}
37
38#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct SpecificationMetadata {
41 pub id: String,
43
44 pub version: String,
46
47 pub publisher: String,
49
50 #[serde(skip_serializing_if = "Option::is_none")]
52 pub title: Option<String>,
53
54 #[serde(skip_serializing_if = "Option::is_none")]
56 pub description: Option<String>,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize)]
61pub struct SchemaField {
62 pub r#type: FieldType,
64
65 #[serde(skip_serializing_if = "Option::is_none")]
67 pub required: Option<bool>,
68
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub uri: Option<String>,
72
73 #[serde(skip_serializing_if = "Option::is_none")]
75 pub pattern: Option<String>,
76
77 #[serde(skip_serializing_if = "Option::is_none")]
79 pub r#enum: Option<Vec<Value>>,
80
81 #[serde(skip_serializing_if = "Option::is_none")]
83 pub properties: Option<HashMap<String, SchemaField>>,
84
85 #[serde(skip_serializing_if = "Option::is_none")]
87 pub items: Option<Box<SchemaField>>,
88
89 #[serde(skip_serializing_if = "Option::is_none")]
91 pub description: Option<String>,
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize)]
96#[serde(rename_all = "lowercase")]
97pub enum FieldType {
98 String,
99 Number,
100 Boolean,
101 Object,
102 Array,
103 Ref,
104 Any,
105}
106
107#[derive(Debug, Serialize, Deserialize)]
109pub struct OutputConfiguration {
110 pub artifacts: Option<Vec<String>>,
111 pub directory: Option<String>,
112}
113
114#[derive(Debug, Serialize, Deserialize)]
115pub struct SourceDefinition {
116 pub path: String,
117 pub r#type: String,
118 pub include: Option<Vec<String>>,
119 pub exclude: Option<Vec<String>>,
120}