use crate::model::TraceabilityLinks;
#[derive(Debug, Clone, Default)]
pub struct EditOptions {
pub item_id: String,
pub name: Option<String>,
pub description: Option<String>,
pub refines: Option<Vec<String>>,
pub derives_from: Option<Vec<String>>,
pub satisfies: Option<Vec<String>>,
pub specification: Option<String>,
pub platform: Option<String>,
}
impl EditOptions {
pub fn new(item_id: impl Into<String>) -> Self {
Self {
item_id: item_id.into(),
..Default::default()
}
}
pub fn with_name(mut self, name: impl Into<String>) -> Self {
self.name = Some(name.into());
self
}
pub fn with_description(mut self, description: impl Into<String>) -> Self {
self.description = Some(description.into());
self
}
pub fn with_refines(mut self, refines: Vec<String>) -> Self {
self.refines = Some(refines);
self
}
pub fn with_derives_from(mut self, derives_from: Vec<String>) -> Self {
self.derives_from = Some(derives_from);
self
}
pub fn with_satisfies(mut self, satisfies: Vec<String>) -> Self {
self.satisfies = Some(satisfies);
self
}
pub fn with_specification(mut self, specification: impl Into<String>) -> Self {
self.specification = Some(specification.into());
self
}
pub fn with_platform(mut self, platform: impl Into<String>) -> Self {
self.platform = Some(platform.into());
self
}
pub fn has_updates(&self) -> bool {
self.name.is_some()
|| self.description.is_some()
|| self.refines.is_some()
|| self.derives_from.is_some()
|| self.satisfies.is_some()
|| self.specification.is_some()
|| self.platform.is_some()
}
}
#[derive(Debug, Clone)]
pub struct EditedValues {
pub name: String,
pub description: Option<String>,
pub specification: Option<String>,
pub platform: Option<String>,
pub traceability: TraceabilityLinks,
}
impl EditedValues {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: name.into(),
description: None,
specification: None,
platform: None,
traceability: TraceabilityLinks::default(),
}
}
pub fn with_description(mut self, description: Option<String>) -> Self {
self.description = description;
self
}
pub fn with_specification(mut self, specification: Option<String>) -> Self {
self.specification = specification;
self
}
pub fn with_platform(mut self, platform: Option<String>) -> Self {
self.platform = platform;
self
}
pub fn with_traceability(mut self, traceability: TraceabilityLinks) -> Self {
self.traceability = traceability;
self
}
}