axioval_ir/contract/
definitions.rs

1#![allow(missing_docs)]
2use super::{ExternalName, LocalizedText, PackageMetadata, ParameterValue};
3use serde::{Deserialize, Serialize};
4use std::collections::BTreeMap;
5#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
6#[serde(rename_all = "camelCase", deny_unknown_fields)]
7pub struct ObjectTypeDefinition {
8    pub id: String,
9    pub name: LocalizedText,
10    pub description: Option<LocalizedText>,
11    pub external_names: Vec<ExternalName>,
12}
13#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
14#[serde(rename_all = "camelCase", deny_unknown_fields)]
15pub struct PropertyDefinition {
16    pub id: String,
17    pub name: LocalizedText,
18    pub description: Option<LocalizedText>,
19    pub value_kind: PropertyValueKind,
20    pub unit_dimension: Option<String>,
21    pub external_names: Vec<ExternalName>,
22}
23#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
24#[serde(rename_all = "camelCase", deny_unknown_fields)]
25pub struct PropertySetDefinition {
26    pub id: String,
27    pub name: LocalizedText,
28    pub description: Option<LocalizedText>,
29    pub external_names: Vec<ExternalName>,
30}
31#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
32#[serde(rename_all = "camelCase", deny_unknown_fields)]
33pub struct ParameterDefinition {
34    pub id: String,
35    pub name: LocalizedText,
36    pub description: Option<LocalizedText>,
37    pub kind: ParameterKind,
38    pub referenced_value_kind: Option<PropertyValueKind>,
39    #[serde(default = "yes")]
40    pub required: bool,
41    pub default_value: Option<ParameterValue>,
42    #[serde(default)]
43    pub allowed_values: Vec<ParameterValue>,
44    pub unit_dimension: Option<String>,
45}
46#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
47#[serde(deny_unknown_fields)]
48pub struct RuleDefinition {
49    pub id: String,
50    pub name: LocalizedText,
51    pub description: Option<LocalizedText>,
52    pub capability: String,
53    #[serde(default)]
54    pub parameters: BTreeMap<String, ParameterDefinition>,
55    #[serde(default)]
56    pub tags: Vec<String>,
57}
58#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
59#[serde(rename_all = "camelCase", deny_unknown_fields)]
60pub struct DefinitionPackage {
61    pub schema_version: String,
62    pub package: PackageMetadata,
63    #[serde(default)]
64    pub object_types: BTreeMap<String, ObjectTypeDefinition>,
65    #[serde(default)]
66    pub properties: BTreeMap<String, PropertyDefinition>,
67    #[serde(default)]
68    pub property_sets: BTreeMap<String, PropertySetDefinition>,
69    #[serde(default)]
70    pub definitions: BTreeMap<String, RuleDefinition>,
71}
72#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
73#[serde(rename_all = "camelCase")]
74pub enum ParameterKind {
75    String,
76    Boolean,
77    Integer,
78    Number,
79    Quantity,
80    Enum,
81    Reference,
82    ObjectTypeReference,
83    PropertyReference,
84    Selector,
85    StringList,
86    ReferenceList,
87}
88#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
89#[serde(rename_all = "camelCase")]
90pub enum PropertyValueKind {
91    String,
92    Boolean,
93    Integer,
94    Number,
95    Quantity,
96    Enum,
97    Reference,
98    StringList,
99    ReferenceList,
100}
101const fn yes() -> bool {
102    true
103}