#[cfg(feature = "schema")]
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(transparent)]
pub struct SemanticAnnotationId(
#[serde(serialize_with = "crate::schema::serialize_reference_id")] pub String,
);
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "snake_case")]
pub enum SemanticAnnotationKind {
Dimension,
Text,
GeometricTolerance,
Datum,
Balloon,
Leader,
Symbol,
Other,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct SemanticAnnotationTarget {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub target: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub external_document: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub external_object: Option<String>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub is_null: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub subelements: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
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")]
pub references: BTreeMap<String, Vec<SemanticAnnotationTarget>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub value: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub format: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub position: Option<[f64; 3]>,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub parameters: BTreeMap<String, String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub assets: Vec<String>,
pub native_ref: String,
}