use super::MOD_PATH;
use crate::tmf646::appointment::AppointmentRef;
use crate::tmf651::agreement::AgreementRef;
use crate::{HasId, HasName, TimePeriod, Uri};
use serde::{Deserialize, Serialize};
use tmflib_derive::{HasId, HasName};
const CLASS_PATH: &str = "work";
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct WorkRef {
pub href: Uri,
pub id: String,
pub name: String,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(untagged)]
pub enum WorkRefOrValue {
Ref(WorkRef),
Val(Work),
}
impl WorkRefOrValue {
pub fn get_id(&self) -> String {
match self {
WorkRefOrValue::Ref(r) => r.id.clone(),
WorkRefOrValue::Val(v) => v.get_id(),
}
}
pub fn get_name(&self) -> String {
match self {
WorkRefOrValue::Ref(r) => r.name.clone(),
WorkRefOrValue::Val(v) => v.get_name(),
}
}
}
impl From<WorkRef> for WorkRefOrValue {
fn from(value: WorkRef) -> Self {
WorkRefOrValue::Ref(value)
}
}
impl From<Work> for WorkRefOrValue {
fn from(value: Work) -> Self {
WorkRefOrValue::Val(value)
}
}
#[derive(Clone, Debug, Default, Deserialize, HasId, HasName, Serialize)]
pub struct Work {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "@type")]
pub r#type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "@baseType")]
pub base_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "@schemaLocation")]
pub schema_location: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub href: Option<Uri>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub completion_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub deliver_time_slot: Option<TimePeriod>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expected_completion_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub agreement: Option<Vec<AgreementRef>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub appointment: Option<AppointmentRef>,
}
impl Work {
pub fn new(name: impl Into<String>) -> Work {
let mut out = Work::create();
out.set_name(name);
out
}
}