use crate::volcengine::error::error;
use crate::volcengine::request::operation_config;
#[derive(Debug, Clone)]
pub struct Operation {
pub name: operation_config::operation_name::OperationName,
pub http_method: operation_config::operation_http_method::OperationHttpMethod,
pub http_path: operation_config::operation_http_path::OperationHttpPath,
}
impl Operation {
pub fn builder() -> OperationBuilder {
OperationBuilder {
name: None,
http_method: None,
http_path: None,
}
}
}
pub struct OperationBuilder {
pub name: Option<operation_config::operation_name::OperationName>,
pub http_method: Option<operation_config::operation_http_method::OperationHttpMethod>,
pub http_path: Option<operation_config::operation_http_path::OperationHttpPath>,
}
impl OperationBuilder {
pub fn with_operation_name(
mut self,
operation_name: operation_config::operation_name::OperationName,
) -> Self {
self.name = Some(operation_name);
self
}
pub fn with_operation_http_method(
mut self,
operation_http_method: operation_config::operation_http_method::OperationHttpMethod,
) -> Self {
self.http_method = Some(operation_http_method);
self
}
pub fn with_operation_http_path(
mut self,
operation_http_path: operation_config::operation_http_path::OperationHttpPath,
) -> Self {
self.http_path = Some(operation_http_path);
self
}
pub fn build(self) -> Result<Operation, error::Error> {
if self.name.is_none() {
return Err(error::Error::ErrUtilRequestBuildOperationNo(
"operation_name".to_string(),
));
}
if self.http_method.is_none() {
return Err(error::Error::ErrUtilRequestBuildOperationNo(
"operation_http_method".to_string(),
));
}
Ok(Operation {
name: self.name.unwrap(),
http_method: self.http_method.unwrap(),
http_path: self.http_path.unwrap_or_default(),
})
}
}