rusp_lib/usp_builder/
delete.rs1use crate::usp::mod_Body::OneOfmsg_body::{request, response};
2use crate::usp::mod_DeleteResp::mod_DeletedObjectResult::mod_OperationStatus::{
3 OneOfoper_status::{oper_failure, oper_success},
4 OperationFailure, OperationSuccess,
5};
6use crate::usp::mod_DeleteResp::UnaffectedPathError;
7use crate::usp::mod_DeleteResp::{mod_DeletedObjectResult::OperationStatus, DeletedObjectResult};
8use crate::usp::mod_Request::OneOfreq_type::delete;
9use crate::usp::mod_Response::OneOfresp_type::delete_resp;
10use crate::usp::{Body, Delete, DeleteResp, Request, Response};
11use crate::usp_errors;
12
13use anyhow::Result;
14
15#[derive(Clone)]
16pub struct DeleteBuilder {
17 allow_partial: bool,
18 obj_paths: Vec<String>,
19}
20
21impl DeleteBuilder {
22 #[must_use]
23 pub const fn new() -> Self {
24 Self {
25 allow_partial: false,
26 obj_paths: vec![],
27 }
28 }
29
30 #[must_use]
31 pub const fn with_allow_partial(mut self, allow_partial: bool) -> Self {
32 self.allow_partial = allow_partial;
33 self
34 }
35
36 #[must_use]
37 pub fn with_obj_paths(mut self, params: Vec<String>) -> Self {
38 self.obj_paths = params;
39 self
40 }
41
42 pub fn build(self) -> Result<Body> {
43 Ok(Body {
44 msg_body: request({
45 Request {
46 req_type: delete({
47 Delete {
48 allow_partial: self.allow_partial,
49 obj_paths: self.obj_paths,
50 }
51 }),
52 }
53 }),
54 })
55 }
56}
57
58#[derive(Clone)]
59pub struct DeleteRespUnaffectedPathError {
60 pub unaffected_path: String,
61 pub err_code: u32,
62 pub err_msg: String,
63}
64
65#[derive(Clone)]
66pub struct DeleteRespOperationSuccessBuilder {
67 affected_paths: Vec<String>,
68 unaffected_path_errs: Vec<DeleteRespUnaffectedPathError>,
69}
70
71#[derive(Clone)]
72pub enum DeleteRespOperationStatus {
73 Failure { err_code: u32, err_msg: String },
74 Success(DeleteRespOperationSuccessBuilder),
75 None,
76}
77
78#[derive(Clone)]
79pub struct DeletedObjectResultsBuilder {
80 requested_path: String,
81 oper_status: DeleteRespOperationStatus,
82}
83
84impl DeletedObjectResultsBuilder {
85 #[must_use]
86 pub const fn new(requested_path: String) -> Self {
87 Self {
88 requested_path,
89 oper_status: DeleteRespOperationStatus::None,
90 }
91 }
92
93 #[must_use]
94 pub fn set_failure(mut self, err_code: u32, err_msg: Option<String>) -> Self {
95 self.oper_status = DeleteRespOperationStatus::Failure {
96 err_code,
97 err_msg: err_msg.unwrap_or_else(|| usp_errors::get_err_msg(err_code).to_string()),
98 };
99 self
100 }
101
102 #[must_use]
103 pub fn set_success(
104 mut self,
105 affected_paths: Vec<String>,
106 unaffected_path_errs: Vec<DeleteRespUnaffectedPathError>,
107 ) -> Self {
108 self.oper_status = DeleteRespOperationStatus::Success(DeleteRespOperationSuccessBuilder {
109 affected_paths,
110 unaffected_path_errs,
111 });
112 self
113 }
114
115 pub fn build(self) -> Result<DeletedObjectResult> {
116 Ok(DeletedObjectResult {
117 requested_path: self.requested_path,
118 oper_status: match self.oper_status {
119 DeleteRespOperationStatus::Success(s) => Some(OperationStatus {
120 oper_status: oper_success(OperationSuccess {
121 affected_paths: s.affected_paths,
122 unaffected_path_errs: s
123 .unaffected_path_errs
124 .into_iter()
125 .map(|e| UnaffectedPathError {
126 unaffected_path: e.unaffected_path,
127 err_code: e.err_code,
128 err_msg: if e.err_msg.is_empty() {
129 usp_errors::get_err_msg(e.err_code).into()
130 } else {
131 e.err_msg
132 },
133 })
134 .collect(),
135 }),
136 }),
137 DeleteRespOperationStatus::Failure { err_code, err_msg } => Some(OperationStatus {
138 oper_status: oper_failure(OperationFailure { err_code, err_msg }),
139 }),
140 DeleteRespOperationStatus::None => Err(anyhow::anyhow!(""))?,
141 },
142 })
143 }
144}
145
146#[derive(Clone)]
147pub struct DeleteRespBuilder {
148 deleted_obj_results: Vec<DeletedObjectResultsBuilder>,
149}
150
151impl DeleteRespBuilder {
152 #[must_use]
153 pub const fn new() -> Self {
154 Self {
155 deleted_obj_results: vec![],
156 }
157 }
158
159 #[must_use]
160 pub fn with_deleted_obj_results(
161 mut self,
162 deleted_obj_results: Vec<DeletedObjectResultsBuilder>,
163 ) -> Self {
164 self.deleted_obj_results = deleted_obj_results;
165 self
166 }
167
168 pub fn build(self) -> Result<Body> {
169 Ok(Body {
170 msg_body: response({
171 Response {
172 resp_type: delete_resp({
173 DeleteResp {
174 deleted_obj_results: self
175 .deleted_obj_results
176 .into_iter()
177 .map(DeletedObjectResultsBuilder::build)
178 .collect::<Result<Vec<_>>>()?,
179 }
180 }),
181 }
182 }),
183 })
184 }
185}