rusp_lib/usp_builder/
deregister.rs

1use 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}