use crate::{
DateTime, HasDescription, HasId, HasLastUpdate, HasName, HasValidity, TimePeriod, Uri,
};
use serde::{Deserialize, Serialize};
use tmflib_derive::{HasDescription, HasId, HasLastUpdate, HasName, HasValidity};
use crate::common::attachment::AttachmentRefOrValue;
use crate::common::external_identifier::ExternalIdentifier;
use super::MOD_PATH;
const CLASS_PATH: &str = "resourceSpecification";
#[derive(
Clone,
Default,
Debug,
Deserialize,
HasId,
HasName,
HasDescription,
HasLastUpdate,
HasValidity,
Serialize,
)]
pub struct ResourceSpecification {
pub category: Option<String>,
pub description: Option<String>,
pub href: Option<Uri>,
pub id: Option<String>,
pub is_bundle: bool,
pub last_update: Option<DateTime>,
pub lifecycle_status: Option<String>,
pub name: Option<String>,
pub valid_for: Option<TimePeriod>,
pub attachment: Vec<AttachmentRefOrValue>,
pub external_identifier: Vec<ExternalIdentifier>,
pub feature: Vec<FeatureSpecification>,
}
impl ResourceSpecification {
pub fn new(name: impl Into<String>) -> ResourceSpecification {
ResourceSpecification {
name: Some(name.into()),
lifecycle_status: Some(String::from("New")),
..ResourceSpecification::create_with_time()
}
}
}
#[derive(Clone, Default, Debug, Deserialize, Serialize)]
pub struct FeatureSpecification {
pub feature_spec_relationship: Vec<FeatureSpecificationRelationship>,
}
#[derive(Clone, Default, Debug, Deserialize, Serialize)]
pub struct FeatureSpecificationRelationship {}
#[cfg(test)]
mod test {
use super::*;
const SPEC_NAME: &str = "SpecificationName";
#[test]
fn test_resourcespecification_new() {
let spec = ResourceSpecification::new(SPEC_NAME);
assert_eq!(spec.name.is_some(), true);
assert_eq!(spec.get_name().as_str(), SPEC_NAME);
}
}