feat: add script::builder
This commit is contained in:
parent
07ceede2ea
commit
85a51d74ea
@ -1,8 +1,10 @@
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use builder::Builder;
|
||||||
use parameter::Parameter;
|
use parameter::Parameter;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
mod builder;
|
||||||
mod parameter;
|
mod parameter;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone, Default, Debug)]
|
#[derive(Serialize, Deserialize, Clone, Default, Debug)]
|
||||||
@ -19,6 +21,10 @@ pub struct Script {
|
|||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
impl Script {
|
impl Script {
|
||||||
|
pub fn builder() -> Builder {
|
||||||
|
Builder::new()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn name(&self) -> &str {
|
pub fn name(&self) -> &str {
|
||||||
&self.name
|
&self.name
|
||||||
}
|
}
|
||||||
@ -97,7 +103,7 @@ fn parse_powershell_file(path: &str) -> Result<serde_json::Value, String> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod tests {
|
||||||
#![allow(clippy::unwrap_used, clippy::expect_used)]
|
#![allow(clippy::unwrap_used, clippy::expect_used)]
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
141
src/script/builder.rs
Normal file
141
src/script/builder.rs
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use super::{Script, parameter::Parameter};
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub struct Builder {
|
||||||
|
name: Option<Arc<str>>,
|
||||||
|
path: Option<Arc<str>>,
|
||||||
|
parameters: Vec<Parameter>,
|
||||||
|
default_parameter_set: Option<Arc<str>>,
|
||||||
|
help_uri: Option<Arc<str>>,
|
||||||
|
supports_paging: Option<Arc<str>>,
|
||||||
|
supports_should_process: Option<bool>,
|
||||||
|
positional_binding: Option<bool>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Builder {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Self {
|
||||||
|
name: None,
|
||||||
|
path: None,
|
||||||
|
parameters: vec![],
|
||||||
|
default_parameter_set: None,
|
||||||
|
help_uri: None,
|
||||||
|
supports_should_process: None,
|
||||||
|
supports_paging: None,
|
||||||
|
positional_binding: None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Add Custom Error Type
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub fn build(self) -> Result<Script, String> {
|
||||||
|
match (self.name, self.path) {
|
||||||
|
(None, None) => Err(String::from("Name and Path are required")),
|
||||||
|
(_, None) => Err(String::from("Path is required")),
|
||||||
|
(None, _) => Err(String::from("Name is required")),
|
||||||
|
(Some(name), Some(path)) => Ok(Script {
|
||||||
|
name,
|
||||||
|
path,
|
||||||
|
parameters: self.parameters,
|
||||||
|
default_parameter_set: self.default_parameter_set,
|
||||||
|
help_uri: self.help_uri,
|
||||||
|
supports_should_process: self.supports_should_process,
|
||||||
|
supports_paging: self.supports_paging,
|
||||||
|
positional_binding: self.positional_binding,
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub fn set_name<T: AsRef<str>>(mut self, name: T) -> Self {
|
||||||
|
self.name = Some(Arc::from(name.as_ref()));
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub fn set_path<T: AsRef<str>>(mut self, path: T) -> Self {
|
||||||
|
self.path = Some(Arc::from(path.as_ref()));
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub fn add_parameter(mut self, parameter: Parameter) -> Self {
|
||||||
|
self.parameters.push(parameter);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub fn set_parameters(mut self, parameters: Vec<Parameter>) -> Self {
|
||||||
|
self.parameters = parameters;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub fn set_default_parameter_set<T: AsRef<str>>(mut self, param_set: Option<T>) -> Self {
|
||||||
|
if let Some(v) = param_set {
|
||||||
|
self.default_parameter_set = Some(Arc::from(v.as_ref()));
|
||||||
|
} else {
|
||||||
|
self.default_parameter_set = None;
|
||||||
|
}
|
||||||
|
self
|
||||||
|
}
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub fn set_help_uri<T: AsRef<str>>(mut self, help_uri: Option<T>) -> Self {
|
||||||
|
if let Some(v) = help_uri {
|
||||||
|
self.help_uri = Some(Arc::from(v.as_ref()));
|
||||||
|
} else {
|
||||||
|
self.help_uri = None;
|
||||||
|
}
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub fn set_supports_paging<T: AsRef<str>>(mut self, supports_paging: Option<T>) -> Self {
|
||||||
|
if let Some(v) = supports_paging {
|
||||||
|
self.supports_paging = Some(Arc::from(v.as_ref()));
|
||||||
|
} else {
|
||||||
|
self.supports_paging = None;
|
||||||
|
}
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub fn set_supports_should_process(mut self, supports_should_process: Option<bool>) -> Self {
|
||||||
|
if let Some(v) = supports_should_process {
|
||||||
|
self.supports_should_process = Some(v);
|
||||||
|
} else {
|
||||||
|
self.supports_should_process = None;
|
||||||
|
}
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub fn set_positional_binding(mut self, positional_binding: Option<bool>) -> Self {
|
||||||
|
if let Some(v) = positional_binding {
|
||||||
|
self.positional_binding = Some(v);
|
||||||
|
} else {
|
||||||
|
self.positional_binding = None;
|
||||||
|
}
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
#![allow(clippy::expect_used, unused_imports)]
|
||||||
|
use crate::script::Script;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn builder() {
|
||||||
|
let got = Script::builder()
|
||||||
|
.set_name("test-name")
|
||||||
|
.set_path("test-path")
|
||||||
|
.build()
|
||||||
|
.expect("should always build");
|
||||||
|
|
||||||
|
assert_eq!(got.path(), "test-path");
|
||||||
|
assert_eq!(got.name(), "test-name");
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user