use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct AasSemIdKey {
#[serde(rename = "type")]
pub key_type: String,
pub value: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct AasSemId {
#[serde(rename = "type")]
pub ref_type: String,
pub keys: Vec<AasSemIdKey>,
}
impl AasSemId {
pub fn external(value: &str) -> Self {
Self {
ref_type: "ExternalReference".into(),
keys: vec![AasSemIdKey {
key_type: "GlobalReference".into(),
value: value.to_owned(),
}],
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum AasDataType {
#[serde(rename = "xs:string")]
String,
#[serde(rename = "xs:double")]
Double,
#[serde(rename = "xs:integer")]
Integer,
#[serde(rename = "xs:boolean")]
Boolean,
#[serde(rename = "xs:dateTime")]
DateTime,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct AasProperty {
pub id_short: String,
pub value_type: AasDataType,
pub value: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub unit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub semantic_id: Option<AasSemId>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct AasCollection {
pub id_short: String,
pub value: Vec<AasSubmodelElement>,
#[serde(skip_serializing_if = "Option::is_none")]
pub semantic_id: Option<AasSemId>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct AasReference {
pub id_short: String,
pub value: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub semantic_id: Option<AasSemId>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(tag = "modelType")]
pub enum AasSubmodelElement {
Property(AasProperty),
SubmodelElementCollection(AasCollection),
Reference(AasReference),
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct AasSubmodel {
pub id: String,
pub id_short: String,
pub model_type: String,
pub kind: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub semantic_id: Option<AasSemId>,
pub submodel_elements: Vec<AasSubmodelElement>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SpecificAssetId {
pub name: String,
pub value: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct AssetInformation {
pub global_asset_id: String,
pub specific_asset_ids: Vec<SpecificAssetId>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct AasSubmodelRef {
pub id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct AasShell {
pub id: String,
pub id_short: String,
pub model_type: String,
pub kind: String,
pub asset_information: AssetInformation,
pub submodels: Vec<AasSubmodelRef>,
}