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}