rusmpp_core/pdus/owned/
query_sm.rs1use rusmpp_macros::Rusmpp;
2
3use crate::{pdus::owned::Pdu, types::owned::COctetString, values::*};
4
5#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default, Rusmpp)]
11#[rusmpp(decode = owned, test = skip)]
12#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
13#[cfg_attr(feature = "serde", derive(::serde::Serialize))]
14#[cfg_attr(feature = "serde-deserialize-unchecked", derive(::serde::Deserialize))]
15pub struct QuerySm {
16 pub message_id: COctetString<1, 65>,
24 pub source_addr_ton: Ton,
31 pub source_addr_npi: Npi,
40 pub source_addr: COctetString<1, 21>,
47}
48
49impl QuerySm {
50 pub fn new(
51 message_id: COctetString<1, 65>,
52 source_addr_ton: Ton,
53 source_addr_npi: Npi,
54 source_addr: COctetString<1, 21>,
55 ) -> Self {
56 Self {
57 message_id,
58 source_addr_ton,
59 source_addr_npi,
60 source_addr,
61 }
62 }
63
64 pub fn builder() -> QuerySmBuilder {
65 QuerySmBuilder::new()
66 }
67}
68
69impl From<QuerySm> for Pdu {
70 fn from(value: QuerySm) -> Self {
71 Self::QuerySm(value)
72 }
73}
74
75#[derive(Debug, Default)]
76pub struct QuerySmBuilder {
77 inner: QuerySm,
78}
79
80impl QuerySmBuilder {
81 pub fn new() -> Self {
82 Default::default()
83 }
84
85 pub fn message_id(mut self, message_id: COctetString<1, 65>) -> Self {
86 self.inner.message_id = message_id;
87 self
88 }
89
90 pub fn source_addr_ton(mut self, source_addr_ton: Ton) -> Self {
91 self.inner.source_addr_ton = source_addr_ton;
92 self
93 }
94
95 pub fn source_addr_npi(mut self, source_addr_npi: Npi) -> Self {
96 self.inner.source_addr_npi = source_addr_npi;
97 self
98 }
99
100 pub fn source_addr(mut self, source_addr: COctetString<1, 21>) -> Self {
101 self.inner.source_addr = source_addr;
102 self
103 }
104
105 pub fn build(self) -> QuerySm {
106 self.inner
107 }
108}
109
110#[cfg(test)]
111mod tests {
112 use std::str::FromStr;
113
114 use crate::tests::TestInstance;
115
116 use super::*;
117
118 impl TestInstance for QuerySm {
119 fn instances() -> alloc::vec::Vec<Self> {
120 alloc::vec![
121 Self::default(),
122 Self::builder()
123 .message_id(COctetString::from_str("1234567890123456").unwrap())
124 .source_addr_ton(Ton::International)
125 .source_addr_npi(Npi::Isdn)
126 .source_addr(COctetString::from_str("Source Addr").unwrap())
127 .build(),
128 ]
129 }
130 }
131
132 #[test]
133 fn encode_decode() {
134 crate::tests::owned::encode_decode_test_instances::<QuerySm>();
135 }
136}