rusp_lib/usp_builder/
deregister.rs1use crate::usp::mod_Body::OneOfmsg_body::{request, response};
2use crate::usp::mod_DeregisterResp::mod_DeregisteredPathResult::mod_OperationStatus::{
3 OneOfoper_status, OperationFailure, OperationSuccess,
4};
5use crate::usp::mod_DeregisterResp::mod_DeregisteredPathResult::OperationStatus;
6use crate::usp::mod_DeregisterResp::DeregisteredPathResult;
7use crate::usp::mod_Request::OneOfreq_type::deregister;
8use crate::usp::mod_Response::OneOfresp_type::deregister_resp;
9use crate::usp::{Body, Deregister, DeregisterResp, Request, Response};
10
11use crate::usp_errors;
12
13use anyhow::Result;
14
15#[derive(Clone)]
16pub struct DeregisterBuilder {
17 paths: Vec<String>,
18}
19
20impl DeregisterBuilder {
21 #[must_use]
22 pub const fn new() -> Self {
23 Self { paths: vec![] }
24 }
25
26 #[must_use]
27 pub fn with_paths(mut self, paths: Vec<String>) -> Self {
28 self.paths = paths;
29 self
30 }
31
32 pub fn build(self) -> Result<Body> {
33 Ok(Body {
34 msg_body: request({
35 Request {
36 req_type: deregister(Deregister { paths: self.paths }),
37 }
38 }),
39 })
40 }
41}
42
43#[derive(Clone)]
44pub enum DeregisterOperationStatus {
45 Failure { err_code: u32, err_msg: String },
46 Success(Vec<String>),
47 None,
48}
49
50#[derive(Clone)]
51pub struct DeregisteredPathResultBuilder {
52 pub requested_path: String,
53 pub oper_status: DeregisterOperationStatus,
54}
55
56impl DeregisteredPathResultBuilder {
57 #[must_use]
58 pub const fn new(requested_path: String) -> Self {
59 Self {
60 requested_path,
61 oper_status: DeregisterOperationStatus::None,
62 }
63 }
64
65 #[must_use]
66 pub fn set_failure(mut self, err_code: u32, err_msg: Option<String>) -> Self {
67 self.oper_status = DeregisterOperationStatus::Failure {
68 err_code,
69 err_msg: err_msg.unwrap_or_else(|| usp_errors::get_err_msg(err_code).to_string()),
70 };
71 self
72 }
73
74 #[must_use]
75 pub fn set_success(mut self, deregistered_path: Vec<String>) -> Self {
76 self.oper_status = DeregisterOperationStatus::Success(deregistered_path);
77 self
78 }
79
80 pub fn build(self) -> Result<DeregisteredPathResult> {
81 Ok(DeregisteredPathResult {
82 requested_path: self.requested_path,
83 oper_status: Some(match self.oper_status {
84 DeregisterOperationStatus::Failure { err_code, err_msg } => Ok(OperationStatus {
85 oper_status: OneOfoper_status::oper_failure(OperationFailure {
86 err_code,
87 err_msg,
88 }),
89 }),
90 DeregisterOperationStatus::Success(s) => Ok(OperationStatus {
91 oper_status: OneOfoper_status::oper_success(OperationSuccess {
92 deregistered_path: s,
93 }),
94 }),
95 DeregisterOperationStatus::None => Err(anyhow::anyhow!("")),
96 }?),
97 })
98 }
99}
100
101#[derive(Clone)]
102pub struct DeregisterRespBuilder {
103 deregistered_path_results: Vec<DeregisteredPathResultBuilder>,
104}
105
106impl DeregisterRespBuilder {
107 #[must_use]
108 pub const fn new() -> Self {
109 Self {
110 deregistered_path_results: vec![],
111 }
112 }
113
114 #[must_use]
115 pub fn with_deregistered_path_results(
116 mut self,
117 deregistered_path_results: Vec<DeregisteredPathResultBuilder>,
118 ) -> Self {
119 self.deregistered_path_results = deregistered_path_results;
120 self
121 }
122
123 pub fn build(self) -> Result<Body> {
124 let deregistered_path_results = self
125 .deregistered_path_results
126 .into_iter()
127 .map(DeregisteredPathResultBuilder::build)
128 .collect::<Result<Vec<_>>>()?;
129
130 Ok(Body {
131 msg_body: response({
132 Response {
133 resp_type: deregister_resp(DeregisterResp {
134 deregistered_path_results,
135 }),
136 }
137 }),
138 })
139 }
140}