use super::*;
pub struct RaiseErrorDefinitionBuilder {
error: ErrorDefinition,
}
impl RaiseErrorDefinitionBuilder {
pub fn new() -> Self {
Self {
error: ErrorDefinition::default(),
}
}
pub fn with_type(&mut self, type_: &str) -> &mut Self {
self.error.type_ = ErrorType::uri_template(type_);
self
}
pub fn with_status(&mut self, status: Value) -> &mut Self {
self.error.status = status;
self
}
pub fn with_title(&mut self, title: &str) -> &mut Self {
self.error.title = Some(title.to_string());
self
}
pub fn with_detail(&mut self, detail: &str) -> &mut Self {
self.error.detail = Some(detail.to_string());
self
}
pub fn with_instance(&mut self, instance: &str) -> &mut Self {
self.error.instance = Some(instance.to_string());
self
}
pub fn build(self) -> OneOfErrorDefinitionOrReference {
OneOfErrorDefinitionOrReference::Error(self.error)
}
}
impl Default for RaiseErrorDefinitionBuilder {
fn default() -> Self {
Self::new()
}
}
#[derive(Default)]
pub struct RaiseTaskDefinitionBuilder {
task: RaiseTaskDefinition,
error_builder: Option<RaiseErrorDefinitionBuilder>,
}
impl RaiseTaskDefinitionBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn error(&mut self) -> &mut RaiseErrorDefinitionBuilder {
self.error_builder = Some(RaiseErrorDefinitionBuilder::new());
self.get_error_builder()
}
pub fn error_reference(&mut self, ref_name: &str) -> &mut Self {
self.task.raise.error = OneOfErrorDefinitionOrReference::Reference(ref_name.to_string());
self.error_builder = None;
self
}
fn get_error_builder(&mut self) -> &mut RaiseErrorDefinitionBuilder {
if let Some(ref mut builder) = self.error_builder {
builder
} else {
unreachable!("Error builder should be set")
}
}
}
impl TaskDefinitionBuilderBase for RaiseTaskDefinitionBuilder {
fn if_(&mut self, condition: &str) -> &mut Self {
self.task.common.if_ = Some(condition.to_string());
self
}
fn with_timeout_reference(&mut self, reference: &str) -> &mut Self {
self.task.common.timeout = Some(OneOfTimeoutDefinitionOrReference::Reference(
reference.to_string(),
));
self
}
fn with_timeout<F>(&mut self, setup: F) -> &mut Self
where
F: FnOnce(&mut TimeoutDefinitionBuilder),
{
let mut builder = TimeoutDefinitionBuilder::new();
setup(&mut builder);
let timeout = builder.build();
self.task.common.timeout = Some(OneOfTimeoutDefinitionOrReference::Timeout(timeout));
self
}
fn with_input<F>(&mut self, setup: F) -> &mut Self
where
F: FnOnce(&mut InputDataModelDefinitionBuilder),
{
let mut builder = InputDataModelDefinitionBuilder::new();
setup(&mut builder);
self.task.common.input = Some(builder.build());
self
}
fn with_output<F>(&mut self, setup: F) -> &mut Self
where
F: FnOnce(&mut OutputDataModelDefinitionBuilder),
{
let mut builder = OutputDataModelDefinitionBuilder::new();
setup(&mut builder);
self.task.common.output = Some(builder.build());
self
}
fn with_export<F>(&mut self, setup: F) -> &mut Self
where
F: FnOnce(&mut OutputDataModelDefinitionBuilder),
{
let mut builder = OutputDataModelDefinitionBuilder::new();
setup(&mut builder);
self.task.common.export = Some(builder.build());
self
}
fn then(&mut self, directive: &str) -> &mut Self {
self.task.common.then = Some(directive.to_string());
self
}
fn build(mut self) -> TaskDefinition {
if let Some(error_builder) = self.error_builder.take() {
self.task.raise.error = error_builder.build();
}
TaskDefinition::Raise(self.task)
}
}