rusp_lib/usp_builder/
register.rs1use crate::usp::mod_Body::OneOfmsg_body::{request, response};
2use crate::usp::mod_Register::RegistrationPath;
3use crate::usp::mod_RegisterResp::mod_RegisteredPathResult::mod_OperationStatus::{
4 OneOfoper_status, OperationFailure, OperationSuccess,
5};
6use crate::usp::mod_RegisterResp::mod_RegisteredPathResult::OperationStatus;
7use crate::usp::mod_RegisterResp::RegisteredPathResult;
8use crate::usp::mod_Request::OneOfreq_type::register;
9use crate::usp::mod_Response::OneOfresp_type::register_resp;
10use crate::usp::{Body, Register, RegisterResp, Request, Response};
11
12use crate::usp_errors;
13
14use anyhow::Result;
15
16#[derive(Clone)]
17pub struct RegisterBuilder {
18 allow_partial: bool,
19 reg_paths: Vec<String>,
20}
21
22impl RegisterBuilder {
23 #[must_use]
24 pub const fn new() -> Self {
25 Self {
26 allow_partial: false,
27 reg_paths: vec![],
28 }
29 }
30
31 #[must_use]
32 pub const fn with_allow_partial(mut self, allow_partial: bool) -> Self {
33 self.allow_partial = allow_partial;
34 self
35 }
36
37 #[must_use]
38 pub fn with_reg_paths(mut self, reg_paths: Vec<String>) -> Self {
39 self.reg_paths = reg_paths;
40 self
41 }
42
43 pub fn build(self) -> Result<Body> {
44 Ok(Body {
45 msg_body: request({
46 Request {
47 req_type: register({
48 Register {
49 allow_partial: self.allow_partial,
50 reg_paths: self
51 .reg_paths
52 .into_iter()
53 .map(|p| RegistrationPath { path: p })
54 .collect(),
55 }
56 }),
57 }
58 }),
59 })
60 }
61}
62
63#[derive(Clone)]
64pub enum RegisterOperationStatus {
65 Failure { err_code: u32, err_msg: String },
66 Success(String),
67 None,
68}
69
70#[derive(Clone)]
71pub struct RegisteredPathResultBuilder {
72 pub requested_path: String,
73 pub oper_status: RegisterOperationStatus,
74}
75
76impl RegisteredPathResultBuilder {
77 #[must_use]
78 pub const fn new(requested_path: String) -> Self {
79 Self {
80 requested_path,
81 oper_status: RegisterOperationStatus::None,
82 }
83 }
84
85 #[must_use]
86 pub fn set_failure(mut self, err_code: u32, err_msg: Option<String>) -> Self {
87 self.oper_status = RegisterOperationStatus::Failure {
88 err_code,
89 err_msg: err_msg.unwrap_or_else(|| usp_errors::get_err_msg(err_code).to_string()),
90 };
91 self
92 }
93
94 #[must_use]
95 pub fn set_success(mut self, registered_path: String) -> Self {
96 self.oper_status = RegisterOperationStatus::Success(registered_path);
97 self
98 }
99
100 pub fn build(self) -> Result<RegisteredPathResult> {
101 Ok(RegisteredPathResult {
102 requested_path: self.requested_path,
103 oper_status: Some(match self.oper_status {
104 RegisterOperationStatus::Failure { err_code, err_msg } => Ok(OperationStatus {
105 oper_status: OneOfoper_status::oper_failure(OperationFailure {
106 err_code,
107 err_msg,
108 }),
109 }),
110 RegisterOperationStatus::Success(s) => Ok(OperationStatus {
111 oper_status: OneOfoper_status::oper_success(OperationSuccess {
112 registered_path: s,
113 }),
114 }),
115 RegisterOperationStatus::None => Err(anyhow::anyhow!("")),
116 }?),
117 })
118 }
119}
120
121#[derive(Clone)]
122pub struct RegisterRespBuilder {
123 registered_path_results: Vec<RegisteredPathResultBuilder>,
124}
125
126impl RegisterRespBuilder {
127 #[must_use]
128 pub const fn new() -> Self {
129 Self {
130 registered_path_results: vec![],
131 }
132 }
133
134 #[must_use]
135 pub fn with_registered_path_results(
136 mut self,
137 registered_path_results: Vec<RegisteredPathResultBuilder>,
138 ) -> Self {
139 self.registered_path_results = registered_path_results;
140 self
141 }
142
143 pub fn build(self) -> Result<Body> {
144 let registered_path_results = self
145 .registered_path_results
146 .into_iter()
147 .map(RegisteredPathResultBuilder::build)
148 .collect::<Result<Vec<_>>>()?;
149
150 Ok(Body {
151 msg_body: response({
152 Response {
153 resp_type: register_resp(RegisterResp {
154 registered_path_results,
155 }),
156 }
157 }),
158 })
159 }
160}