use crate::{
BuilderError,
DataType,
};
#[derive(Debug)]
pub struct ArgumentParam {
name: Box<str>,
kind: DataType,
description: Box<str>,
required: bool,
}
impl ArgumentParam {
pub fn name(&self) -> &str {
&self.name
}
pub fn kind(&self) -> DataType {
self.kind
}
pub fn description(&self) -> &str {
&self.description
}
pub fn required(&self) -> bool {
self.required
}
}
#[derive(Debug)]
pub struct ArgumentParamBuilder<'a, 'b> {
name: Option<&'a str>,
kind: Option<DataType>,
description: Option<&'b str>,
required: bool,
}
impl<'a, 'b> ArgumentParamBuilder<'a, 'b> {
pub fn new() -> Self {
Self {
name: None,
kind: None,
description: None,
required: false,
}
}
pub fn name(&mut self, name: &'a str) -> &mut Self {
self.name = Some(name);
self
}
pub fn kind(&mut self, kind: DataType) -> &mut Self {
self.kind = Some(kind);
self
}
pub fn description(&mut self, description: &'b str) -> &mut Self {
self.description = Some(description);
self
}
pub fn required(&mut self, required: bool) -> &mut Self {
self.required = required;
self
}
pub fn build(&mut self) -> Result<ArgumentParam, BuilderError> {
#[allow(clippy::or_fun_call)]
let name = self.name.ok_or(BuilderError::MissingField("name"))?;
#[allow(clippy::or_fun_call)]
let kind = self.kind.ok_or(BuilderError::MissingField("kind"))?;
#[allow(clippy::or_fun_call)]
let description = self
.description
.ok_or(BuilderError::MissingField("description"))?;
Ok(ArgumentParam {
name: name.into(),
kind,
description: description.into(),
required: self.required,
})
}
}
impl<'a, 'b> Default for ArgumentParamBuilder<'a, 'b> {
fn default() -> Self {
Self::new()
}
}