at_commands/
translate_response.rs
1use crate::generated::translate::{lower_success, raise_success};
9use crate::serde::DeserializeErrorCause;
10use crate::{highlevel, lowlevel};
11
12pub fn raise_response(
13 lowlevel: &lowlevel::Response,
14) -> Result<highlevel::Response, DeserializeErrorCause> {
15 let highlevel = match lowlevel {
16 lowlevel::Response::Ok => highlevel::Response::Ok,
17 lowlevel::Response::Error => highlevel::Response::Error,
18 lowlevel::Response::HardcodedError(err) => {
19 highlevel::Response::HardcodedError(raise_hardcoded_error(err))
20 }
21 lowlevel::Response::CmeError(err_code) => highlevel::Response::CmeError(*err_code),
22 lowlevel::Response::Success { .. } => {
23 let hl = raise_success(lowlevel)?;
24 highlevel::Response::Success(hl)
25 }
26 lowlevel::Response::RawBytes(bytes) => highlevel::Response::RawBytes(bytes.clone()),
27 };
28
29 Ok(highlevel)
30}
31
32fn raise_hardcoded_error(lowlevel: &lowlevel::HardcodedError) -> highlevel::HardcodedError {
33 match lowlevel {
34 lowlevel::HardcodedError::NoCarrier => highlevel::HardcodedError::NoCarrier,
35 lowlevel::HardcodedError::Busy => highlevel::HardcodedError::Busy,
36 lowlevel::HardcodedError::NoAnswer => highlevel::HardcodedError::NoAnswer,
37 lowlevel::HardcodedError::Delayed => highlevel::HardcodedError::Delayed,
38 lowlevel::HardcodedError::Blacklist => highlevel::HardcodedError::Blacklist,
39 }
40}
41
42pub fn lower_response(highlevel: &highlevel::Response) -> lowlevel::Response {
43 match highlevel {
44 highlevel::Response::Ok => lowlevel::Response::Ok,
45 highlevel::Response::Error => lowlevel::Response::Error,
46 highlevel::Response::HardcodedError(err) => {
47 lowlevel::Response::HardcodedError(lower_hardcoded_error(err))
48 }
49 highlevel::Response::CmeError(err_code) => lowlevel::Response::CmeError(*err_code),
50 highlevel::Response::Success(success) => lower_success(success),
51 highlevel::Response::RawBytes(bytes) => lowlevel::Response::RawBytes(bytes.clone()),
52 }
53}
54
55fn lower_hardcoded_error(highlevel: &highlevel::HardcodedError) -> lowlevel::HardcodedError {
56 match highlevel {
57 highlevel::HardcodedError::NoCarrier => lowlevel::HardcodedError::NoCarrier,
58 highlevel::HardcodedError::Busy => lowlevel::HardcodedError::Busy,
59 highlevel::HardcodedError::NoAnswer => lowlevel::HardcodedError::NoAnswer,
60 highlevel::HardcodedError::Delayed => lowlevel::HardcodedError::Delayed,
61 highlevel::HardcodedError::Blacklist => lowlevel::HardcodedError::Blacklist,
62 }
63}