use serde::{Deserialize, Serialize};
use crate::common::note::Note;
use crate::common::related_party::RelatedParty;
use crate::common::tmf_error::TMFError;
use crate::{
DateTime, HasDescription, HasId, HasName, HasNote, HasRelatedParty, HasValidity, Priority,
TimePeriod, Uri,
};
use tmflib_derive::{HasDescription, HasId, HasName, HasNote, HasRelatedParty, HasValidity};
use super::MOD_PATH;
const CLASS_PATH: &str = "resourceFunction";
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct ResourceFunctionRef {
pub href: Uri,
pub id: String,
pub name: String,
pub version: String,
}
impl From<ResourceFunction> for ResourceFunctionRef {
fn from(value: ResourceFunction) -> Self {
ResourceFunctionRef {
href: value.get_href(),
id: value.get_id(),
name: value.get_name(),
version: value.resource_version.unwrap_or("1.0".to_string()),
}
}
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub enum ResourceAdministrativeStateType {
Locked,
#[default]
Unlocked,
Shutdown,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub enum ResourceOperationalStateType {
Enable,
#[default]
Disable,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub enum ResourceUsageStateType {
Idle,
Busy,
#[default]
Active,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct Feature {
pub feature_relationship: Option<Vec<FeatureRelationship>>,
}
#[derive(Clone, Debug, Default, Deserialize, HasId, HasName, HasValidity, Serialize)]
pub struct FeatureRelationship {
id: Option<String>,
href: Option<Uri>,
name: Option<String>,
relationship_type: Option<String>,
valid_for: Option<TimePeriod>,
}
#[derive(
Clone,
Debug,
Default,
HasId,
HasName,
HasDescription,
HasRelatedParty,
HasNote,
Deserialize,
Serialize,
)]
pub struct ResourceFunction {
pub administrative_state: Option<ResourceAdministrativeStateType>,
pub category: Option<String>,
pub end_operating_date: Option<DateTime>,
pub function_type: Option<String>,
pub operational_state: Option<ResourceOperationalStateType>,
pub priority: Option<Priority>,
pub id: Option<String>,
pub href: Option<Uri>,
pub name: Option<String>,
pub description: Option<String>,
pub resource_version: Option<String>,
pub role: Option<String>,
pub start_operating_date: Option<DateTime>,
pub usage_state: Option<ResourceUsageStateType>,
pub value: Option<String>,
pub related_party: Option<Vec<RelatedParty>>,
pub activation_feature: Option<Vec<Feature>>,
pub note: Option<Vec<Note>>,
}