use cadmpeg_core::text::NonBlankString;
#[cfg(feature = "schema")]
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
crate::ids::id_type!(
SemanticAnnotationId, compose
);
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "snake_case")]
#[serde(deny_unknown_fields)]
pub enum SemanticAnnotationKind {
Dimension,
Text,
Balloon,
Leader,
Symbol,
Other,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(deny_unknown_fields)]
pub struct SemanticAnnotation {
pub id: SemanticAnnotationId,
pub object: String,
pub kind: SemanticAnnotationKind,
pub runtime_type: String,
pub order: u32,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub text: Vec<String>,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
#[serde(deserialize_with = "cadmpeg_core::distinct_keys::btree_map")]
pub references: BTreeMap<NonBlankString, Vec<crate::references::ReferenceSelection>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "deserialize_value")]
pub value: Option<crate::scalar::FiniteReal>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "deserialize_format"
)]
pub format: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[serde(deserialize_with = "deserialize_position")]
pub position: Option<crate::units::FiniteVector<3>>,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
#[serde(deserialize_with = "cadmpeg_core::distinct_keys::btree_map")]
pub parameters: BTreeMap<NonBlankString, String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub assets: Vec<String>,
pub native_ref: String,
}
cadmpeg_core::named_optional_field!(deserialize_value, crate::scalar::FiniteReal, "value");
cadmpeg_core::named_optional_field!(
deserialize_position,
crate::units::FiniteVector<3>,
"position"
);
cadmpeg_core::named_optional_field!(deserialize_format, String, "format");
mod identity_rewrite;