use crate::part_1::ToJsonMetamodel;
use crate::part_1::v3_1::core::SpecificAssetId;
use crate::part_1::v3_1::primitives::Identifier;
use crate::part_1::v3_1::submodel_elements::SubmodelElement;
use serde::{Deserialize, Serialize};
use strum::{Display, EnumString};
#[cfg(feature = "openapi")]
use utoipa::ToSchema;
#[derive(Clone, PartialEq, Debug, Deserialize, Serialize, Display, EnumString)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub enum Entity {
CoManagedEntity(EntityInner),
SelfManagedEntity(EntityInner),
}
#[derive(Clone, PartialEq, Debug, Deserialize, Serialize, Default)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct EntityInner {
pub statement: Option<Vec<SubmodelElement>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "globalAssetId")]
pub global_asset_id: Option<Identifier>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "specificAssetId")]
pub specific_asset_id: Option<Vec<SpecificAssetId>>,
}
impl ToJsonMetamodel for Entity {
type Error = ();
fn to_json_metamodel(&self) -> Result<String, Self::Error> {
match self {
Entity::CoManagedEntity(_) => Ok(r#"{"entityType":"CoManagedEntity"}"#.into()),
Entity::SelfManagedEntity(_) => Ok(r#"{"entityType":"SelfManagedEntity"}"#.into()),
}
}
}