1use crate::{
2 CommandStatus,
3 decode::{
4 DecodeError, DecodeResultExt,
5 owned::{Decode, DecodeWithKey, DecodeWithLength},
6 },
7 encode::{Encode, Length},
8 tlvs::TlvTag,
9 types::owned::{AnyOctetString, COctetString, OctetString},
10 values::{owned::*, *},
11};
12
13#[non_exhaustive]
15#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
16#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
17#[cfg_attr(feature = "serde", derive(::serde::Serialize))]
18#[cfg_attr(feature = "serde-deserialize-unchecked", derive(::serde::Deserialize))]
19pub enum TlvValue {
20 AdditionalStatusInfoText(COctetString<1, 256>),
21 AlertOnMessageDelivery(AlertOnMessageDelivery),
22 BillingIdentification(OctetString<0, 1024>),
23 BroadcastAreaIdentifier(BroadcastAreaIdentifier),
30 BroadcastAreaSuccess(BroadcastAreaSuccess),
35 BroadcastContentTypeInfo(OctetString<0, 255>),
36 BroadcastChannelIndicator(BroadcastChannelIndicator),
37 BroadcastContentType(BroadcastContentType),
39 BroadcastEndTime(OctetString<0, 17>),
54 BroadcastErrorStatus(CommandStatus),
55 BroadcastFrequencyInterval(BroadcastFrequencyInterval),
58 BroadcastMessageClass(BroadcastMessageClass),
59 BroadcastRepNum(BroadcastRepNum),
62 BroadcastServiceGroup(OctetString<1, 255>),
63 CallbackNum(OctetString<4, 19>),
64 CallbackNumAtag(OctetString<0, 65>),
65 CallbackNumPresInd(CallbackNumPresInd),
66 CongestionState(CongestionState),
67 DeliveryFailureReason(DeliveryFailureReason),
68 DestAddrNpCountry(OctetString<1, 5>),
69 DestAddrNpInformation(OctetString<0, 10>),
70 DestAddrNpResolution(DestAddrNpResolution),
71 DestAddrSubunit(AddrSubunit),
72 DestBearerType(BearerType),
73 DestNetworkId(COctetString<7, 66>),
74 DestNetworkType(NetworkType),
75 DestNodeId(OctetString<6, 6>),
76 DestSubaddress(Subaddress),
77 DestTelematicsId(u16),
78 DestPort(u16),
79 DisplayTime(DisplayTime),
80 DpfResult(DpfResult),
81 ItsReplyType(ItsReplyType),
82 ItsSessionInfo(ItsSessionInfo),
83 LanguageIndicator(LanguageIndicator),
84 MessagePayload(MessagePayload),
85 MessageState(MessageState),
87 MoreMessagesToSend(MoreMessagesToSend),
88 MsAvailabilityStatus(MsAvailabilityStatus),
89 MsMsgWaitFacilities(MsMsgWaitFacilities),
90 MsValidity(MsValidity),
91 NetworkErrorCode(NetworkErrorCode),
92 NumberOfMessages(NumberOfMessages),
93 PayloadType(PayloadType),
94 PrivacyIndicator(PrivacyIndicator),
95 QosTimeToLive(u32),
96 ReceiptedMessageId(COctetString<1, 65>),
97 SarMsgRefNum(u16),
98 SarSegmentSeqnum(u8),
99 SarTotalSegments(u8),
100 ScInterfaceVersion(InterfaceVersion),
101 SetDpf(SetDpf),
102 SmsSignal(u16),
104 SourceAddrSubunit(AddrSubunit),
105 SourceBearerType(BearerType),
106 SourceNetworkId(COctetString<7, 66>),
107 SourceNetworkType(NetworkType),
108 SourceNodeId(OctetString<6, 6>),
109 SourcePort(u16),
110 SourceSubaddress(Subaddress),
111 SourceTelematicsId(u16),
112 UserMessageReference(UserMessageReference),
113 UserResponseCode(u8),
114 UssdServiceOp(UssdServiceOp),
115 Other {
116 tag: TlvTag,
117 value: AnyOctetString,
118 },
119}
120
121impl TlvValue {
122 pub const fn tag(&self) -> TlvTag {
123 match self {
124 TlvValue::AdditionalStatusInfoText(_) => TlvTag::AdditionalStatusInfoText,
125 TlvValue::AlertOnMessageDelivery(_) => TlvTag::AlertOnMessageDelivery,
126 TlvValue::BillingIdentification(_) => TlvTag::BillingIdentification,
127 TlvValue::BroadcastAreaIdentifier(_) => TlvTag::BroadcastAreaIdentifier,
128 TlvValue::BroadcastAreaSuccess(_) => TlvTag::BroadcastAreaSuccess,
129 TlvValue::BroadcastContentTypeInfo(_) => TlvTag::BroadcastContentTypeInfo,
130 TlvValue::BroadcastChannelIndicator(_) => TlvTag::BroadcastChannelIndicator,
131 TlvValue::BroadcastContentType(_) => TlvTag::BroadcastContentType,
132 TlvValue::BroadcastEndTime(_) => TlvTag::BroadcastEndTime,
133 TlvValue::BroadcastErrorStatus(_) => TlvTag::BroadcastErrorStatus,
134 TlvValue::BroadcastFrequencyInterval(_) => TlvTag::BroadcastFrequencyInterval,
135 TlvValue::BroadcastMessageClass(_) => TlvTag::BroadcastMessageClass,
136 TlvValue::BroadcastRepNum(_) => TlvTag::BroadcastRepNum,
137 TlvValue::BroadcastServiceGroup(_) => TlvTag::BroadcastServiceGroup,
138 TlvValue::CallbackNum(_) => TlvTag::CallbackNum,
139 TlvValue::CallbackNumAtag(_) => TlvTag::CallbackNumAtag,
140 TlvValue::CallbackNumPresInd(_) => TlvTag::CallbackNumPresInd,
141 TlvValue::CongestionState(_) => TlvTag::CongestionState,
142 TlvValue::DeliveryFailureReason(_) => TlvTag::DeliveryFailureReason,
143 TlvValue::DestAddrNpCountry(_) => TlvTag::DestAddrNpCountry,
144 TlvValue::DestAddrNpInformation(_) => TlvTag::DestAddrNpInformation,
145 TlvValue::DestAddrNpResolution(_) => TlvTag::DestAddrNpResolution,
146 TlvValue::DestAddrSubunit(_) => TlvTag::DestAddrSubunit,
147 TlvValue::DestBearerType(_) => TlvTag::DestBearerType,
148 TlvValue::DestNetworkId(_) => TlvTag::DestNetworkId,
149 TlvValue::DestNetworkType(_) => TlvTag::DestNetworkType,
150 TlvValue::DestNodeId(_) => TlvTag::DestNodeId,
151 TlvValue::DestSubaddress(_) => TlvTag::DestSubaddress,
152 TlvValue::DestTelematicsId(_) => TlvTag::DestTelematicsId,
153 TlvValue::DestPort(_) => TlvTag::DestPort,
154 TlvValue::DisplayTime(_) => TlvTag::DisplayTime,
155 TlvValue::DpfResult(_) => TlvTag::DpfResult,
156 TlvValue::ItsReplyType(_) => TlvTag::ItsReplyType,
157 TlvValue::ItsSessionInfo(_) => TlvTag::ItsSessionInfo,
158 TlvValue::LanguageIndicator(_) => TlvTag::LanguageIndicator,
159 TlvValue::MessagePayload(_) => TlvTag::MessagePayload,
160 TlvValue::MessageState(_) => TlvTag::MessageState,
161 TlvValue::MoreMessagesToSend(_) => TlvTag::MoreMessagesToSend,
162 TlvValue::MsAvailabilityStatus(_) => TlvTag::MsAvailabilityStatus,
163 TlvValue::MsMsgWaitFacilities(_) => TlvTag::MsMsgWaitFacilities,
164 TlvValue::MsValidity(_) => TlvTag::MsValidity,
165 TlvValue::NetworkErrorCode(_) => TlvTag::NetworkErrorCode,
166 TlvValue::NumberOfMessages(_) => TlvTag::NumberOfMessages,
167 TlvValue::PayloadType(_) => TlvTag::PayloadType,
168 TlvValue::PrivacyIndicator(_) => TlvTag::PrivacyIndicator,
169 TlvValue::QosTimeToLive(_) => TlvTag::QosTimeToLive,
170 TlvValue::ReceiptedMessageId(_) => TlvTag::ReceiptedMessageId,
171 TlvValue::SarMsgRefNum(_) => TlvTag::SarMsgRefNum,
172 TlvValue::SarSegmentSeqnum(_) => TlvTag::SarSegmentSeqnum,
173 TlvValue::SarTotalSegments(_) => TlvTag::SarTotalSegments,
174 TlvValue::ScInterfaceVersion(_) => TlvTag::ScInterfaceVersion,
175 TlvValue::SetDpf(_) => TlvTag::SetDpf,
176 TlvValue::SmsSignal(_) => TlvTag::SmsSignal,
177 TlvValue::SourceAddrSubunit(_) => TlvTag::SourceAddrSubunit,
178 TlvValue::SourceBearerType(_) => TlvTag::SourceBearerType,
179 TlvValue::SourceNetworkId(_) => TlvTag::SourceNetworkId,
180 TlvValue::SourceNetworkType(_) => TlvTag::SourceNetworkType,
181 TlvValue::SourceNodeId(_) => TlvTag::SourceNodeId,
182 TlvValue::SourcePort(_) => TlvTag::SourcePort,
183 TlvValue::SourceSubaddress(_) => TlvTag::SourceSubaddress,
184 TlvValue::SourceTelematicsId(_) => TlvTag::SourceTelematicsId,
185 TlvValue::UserMessageReference(_) => TlvTag::UserMessageReference,
186 TlvValue::UserResponseCode(_) => TlvTag::UserResponseCode,
187 TlvValue::UssdServiceOp(_) => TlvTag::UssdServiceOp,
188 TlvValue::Other { tag, .. } => *tag,
189 }
190 }
191}
192
193impl Length for TlvValue {
194 fn length(&self) -> usize {
195 match self {
196 TlvValue::AdditionalStatusInfoText(value) => value.length(),
197 TlvValue::AlertOnMessageDelivery(value) => value.length(),
198 TlvValue::BillingIdentification(value) => value.length(),
199 TlvValue::BroadcastAreaIdentifier(value) => value.length(),
200 TlvValue::BroadcastAreaSuccess(value) => value.length(),
201 TlvValue::BroadcastContentTypeInfo(value) => value.length(),
202 TlvValue::BroadcastChannelIndicator(value) => value.length(),
203 TlvValue::BroadcastContentType(value) => value.length(),
204 TlvValue::BroadcastEndTime(value) => value.length(),
205 TlvValue::BroadcastErrorStatus(value) => value.length(),
206 TlvValue::BroadcastFrequencyInterval(value) => value.length(),
207 TlvValue::BroadcastMessageClass(value) => value.length(),
208 TlvValue::BroadcastRepNum(value) => value.length(),
209 TlvValue::BroadcastServiceGroup(value) => value.length(),
210 TlvValue::CallbackNum(value) => value.length(),
211 TlvValue::CallbackNumAtag(value) => value.length(),
212 TlvValue::CallbackNumPresInd(value) => value.length(),
213 TlvValue::CongestionState(value) => value.length(),
214 TlvValue::DeliveryFailureReason(value) => value.length(),
215 TlvValue::DestAddrNpCountry(value) => value.length(),
216 TlvValue::DestAddrNpInformation(value) => value.length(),
217 TlvValue::DestAddrNpResolution(value) => value.length(),
218 TlvValue::DestAddrSubunit(value) => value.length(),
219 TlvValue::DestBearerType(value) => value.length(),
220 TlvValue::DestNetworkId(value) => value.length(),
221 TlvValue::DestNetworkType(value) => value.length(),
222 TlvValue::DestNodeId(value) => value.length(),
223 TlvValue::DestSubaddress(value) => value.length(),
224 TlvValue::DestTelematicsId(value) => value.length(),
225 TlvValue::DestPort(value) => value.length(),
226 TlvValue::DisplayTime(value) => value.length(),
227 TlvValue::DpfResult(value) => value.length(),
228 TlvValue::ItsReplyType(value) => value.length(),
229 TlvValue::ItsSessionInfo(value) => value.length(),
230 TlvValue::LanguageIndicator(value) => value.length(),
231 TlvValue::MessagePayload(value) => value.length(),
232 TlvValue::MessageState(value) => value.length(),
233 TlvValue::MoreMessagesToSend(value) => value.length(),
234 TlvValue::MsAvailabilityStatus(value) => value.length(),
235 TlvValue::MsMsgWaitFacilities(value) => value.length(),
236 TlvValue::MsValidity(value) => value.length(),
237 TlvValue::NetworkErrorCode(value) => value.length(),
238 TlvValue::NumberOfMessages(value) => value.length(),
239 TlvValue::PayloadType(value) => value.length(),
240 TlvValue::PrivacyIndicator(value) => value.length(),
241 TlvValue::QosTimeToLive(value) => value.length(),
242 TlvValue::ReceiptedMessageId(value) => value.length(),
243 TlvValue::SarMsgRefNum(value) => value.length(),
244 TlvValue::SarSegmentSeqnum(value) => value.length(),
245 TlvValue::SarTotalSegments(value) => value.length(),
246 TlvValue::ScInterfaceVersion(value) => value.length(),
247 TlvValue::SetDpf(value) => value.length(),
248 TlvValue::SmsSignal(value) => value.length(),
249 TlvValue::SourceAddrSubunit(value) => value.length(),
250 TlvValue::SourceBearerType(value) => value.length(),
251 TlvValue::SourceNetworkId(value) => value.length(),
252 TlvValue::SourceNetworkType(value) => value.length(),
253 TlvValue::SourceNodeId(value) => value.length(),
254 TlvValue::SourcePort(value) => value.length(),
255 TlvValue::SourceSubaddress(value) => value.length(),
256 TlvValue::SourceTelematicsId(value) => value.length(),
257 TlvValue::UserMessageReference(value) => value.length(),
258 TlvValue::UserResponseCode(value) => value.length(),
259 TlvValue::UssdServiceOp(value) => value.length(),
260 TlvValue::Other { value, .. } => value.length(),
261 }
262 }
263}
264
265impl Encode for TlvValue {
266 fn encode(&self, dst: &mut [u8]) -> usize {
267 match self {
268 TlvValue::AdditionalStatusInfoText(value) => value.encode(dst),
269 TlvValue::AlertOnMessageDelivery(value) => value.encode(dst),
270 TlvValue::BillingIdentification(value) => value.encode(dst),
271 TlvValue::BroadcastAreaIdentifier(value) => value.encode(dst),
272 TlvValue::BroadcastAreaSuccess(value) => value.encode(dst),
273 TlvValue::BroadcastContentTypeInfo(value) => value.encode(dst),
274 TlvValue::BroadcastChannelIndicator(value) => value.encode(dst),
275 TlvValue::BroadcastContentType(value) => value.encode(dst),
276 TlvValue::BroadcastEndTime(value) => value.encode(dst),
277 TlvValue::BroadcastErrorStatus(value) => value.encode(dst),
278 TlvValue::BroadcastFrequencyInterval(value) => value.encode(dst),
279 TlvValue::BroadcastMessageClass(value) => value.encode(dst),
280 TlvValue::BroadcastRepNum(value) => value.encode(dst),
281 TlvValue::BroadcastServiceGroup(value) => value.encode(dst),
282 TlvValue::CallbackNum(value) => value.encode(dst),
283 TlvValue::CallbackNumAtag(value) => value.encode(dst),
284 TlvValue::CallbackNumPresInd(value) => value.encode(dst),
285 TlvValue::CongestionState(value) => value.encode(dst),
286 TlvValue::DeliveryFailureReason(value) => value.encode(dst),
287 TlvValue::DestAddrNpCountry(value) => value.encode(dst),
288 TlvValue::DestAddrNpInformation(value) => value.encode(dst),
289 TlvValue::DestAddrNpResolution(value) => value.encode(dst),
290 TlvValue::DestAddrSubunit(value) => value.encode(dst),
291 TlvValue::DestBearerType(value) => value.encode(dst),
292 TlvValue::DestNetworkId(value) => value.encode(dst),
293 TlvValue::DestNetworkType(value) => value.encode(dst),
294 TlvValue::DestNodeId(value) => value.encode(dst),
295 TlvValue::DestSubaddress(value) => value.encode(dst),
296 TlvValue::DestTelematicsId(value) => value.encode(dst),
297 TlvValue::DestPort(value) => value.encode(dst),
298 TlvValue::DisplayTime(value) => value.encode(dst),
299 TlvValue::DpfResult(value) => value.encode(dst),
300 TlvValue::ItsReplyType(value) => value.encode(dst),
301 TlvValue::ItsSessionInfo(value) => value.encode(dst),
302 TlvValue::LanguageIndicator(value) => value.encode(dst),
303 TlvValue::MessagePayload(value) => value.encode(dst),
304 TlvValue::MessageState(value) => value.encode(dst),
305 TlvValue::MoreMessagesToSend(value) => value.encode(dst),
306 TlvValue::MsAvailabilityStatus(value) => value.encode(dst),
307 TlvValue::MsMsgWaitFacilities(value) => value.encode(dst),
308 TlvValue::MsValidity(value) => value.encode(dst),
309 TlvValue::NetworkErrorCode(value) => value.encode(dst),
310 TlvValue::NumberOfMessages(value) => value.encode(dst),
311 TlvValue::PayloadType(value) => value.encode(dst),
312 TlvValue::PrivacyIndicator(value) => value.encode(dst),
313 TlvValue::QosTimeToLive(value) => value.encode(dst),
314 TlvValue::ReceiptedMessageId(value) => value.encode(dst),
315 TlvValue::SarMsgRefNum(value) => value.encode(dst),
316 TlvValue::SarSegmentSeqnum(value) => value.encode(dst),
317 TlvValue::SarTotalSegments(value) => value.encode(dst),
318 TlvValue::ScInterfaceVersion(value) => value.encode(dst),
319 TlvValue::SetDpf(value) => value.encode(dst),
320 TlvValue::SmsSignal(value) => value.encode(dst),
321 TlvValue::SourceAddrSubunit(value) => value.encode(dst),
322 TlvValue::SourceBearerType(value) => value.encode(dst),
323 TlvValue::SourceNetworkId(value) => value.encode(dst),
324 TlvValue::SourceNetworkType(value) => value.encode(dst),
325 TlvValue::SourceNodeId(value) => value.encode(dst),
326 TlvValue::SourcePort(value) => value.encode(dst),
327 TlvValue::SourceSubaddress(value) => value.encode(dst),
328 TlvValue::SourceTelematicsId(value) => value.encode(dst),
329 TlvValue::UserMessageReference(value) => value.encode(dst),
330 TlvValue::UserResponseCode(value) => value.encode(dst),
331 TlvValue::UssdServiceOp(value) => value.encode(dst),
332 TlvValue::Other { value, .. } => value.encode(dst),
333 }
334 }
335}
336
337impl DecodeWithKey for TlvValue {
338 type Key = TlvTag;
339
340 fn decode(key: Self::Key, src: &[u8], length: usize) -> Result<(Self, usize), DecodeError> {
341 let (value, size) = match key {
342 TlvTag::AdditionalStatusInfoText => {
343 Decode::decode(src).map_decoded(Self::AdditionalStatusInfoText)?
344 }
345 TlvTag::AlertOnMessageDelivery => {
346 Decode::decode(src).map_decoded(Self::AlertOnMessageDelivery)?
347 }
348 TlvTag::BillingIdentification => {
349 DecodeWithLength::decode(src, length).map_decoded(Self::BillingIdentification)?
350 }
351 TlvTag::BroadcastAreaIdentifier => {
352 DecodeWithLength::decode(src, length).map_decoded(Self::BroadcastAreaIdentifier)?
353 }
354 TlvTag::BroadcastAreaSuccess => {
355 Decode::decode(src).map_decoded(Self::BroadcastAreaSuccess)?
356 }
357 TlvTag::BroadcastContentTypeInfo => {
358 DecodeWithLength::decode(src, length).map_decoded(Self::BroadcastContentTypeInfo)?
359 }
360 TlvTag::BroadcastChannelIndicator => {
361 Decode::decode(src).map_decoded(Self::BroadcastChannelIndicator)?
362 }
363 TlvTag::BroadcastContentType => {
364 Decode::decode(src).map_decoded(Self::BroadcastContentType)?
365 }
366 TlvTag::BroadcastEndTime => {
367 DecodeWithLength::decode(src, length).map_decoded(Self::BroadcastEndTime)?
368 }
369 TlvTag::BroadcastErrorStatus => {
370 Decode::decode(src).map_decoded(Self::BroadcastErrorStatus)?
371 }
372 TlvTag::BroadcastFrequencyInterval => {
373 Decode::decode(src).map_decoded(Self::BroadcastFrequencyInterval)?
374 }
375 TlvTag::BroadcastMessageClass => {
376 Decode::decode(src).map_decoded(Self::BroadcastMessageClass)?
377 }
378 TlvTag::BroadcastRepNum => Decode::decode(src).map_decoded(Self::BroadcastRepNum)?,
379 TlvTag::BroadcastServiceGroup => {
380 DecodeWithLength::decode(src, length).map_decoded(Self::BroadcastServiceGroup)?
381 }
382 TlvTag::CallbackNum => {
383 DecodeWithLength::decode(src, length).map_decoded(Self::CallbackNum)?
384 }
385 TlvTag::CallbackNumAtag => {
386 DecodeWithLength::decode(src, length).map_decoded(Self::CallbackNumAtag)?
387 }
388 TlvTag::CallbackNumPresInd => {
389 Decode::decode(src).map_decoded(Self::CallbackNumPresInd)?
390 }
391 TlvTag::CongestionState => Decode::decode(src).map_decoded(Self::CongestionState)?,
392 TlvTag::DeliveryFailureReason => {
393 Decode::decode(src).map_decoded(Self::DeliveryFailureReason)?
394 }
395 TlvTag::DestAddrNpCountry => {
396 DecodeWithLength::decode(src, length).map_decoded(Self::DestAddrNpCountry)?
397 }
398 TlvTag::DestAddrNpInformation => {
399 DecodeWithLength::decode(src, length).map_decoded(Self::DestAddrNpInformation)?
400 }
401 TlvTag::DestAddrNpResolution => {
402 Decode::decode(src).map_decoded(Self::DestAddrNpResolution)?
403 }
404 TlvTag::DestAddrSubunit => Decode::decode(src).map_decoded(Self::DestAddrSubunit)?,
405 TlvTag::DestBearerType => Decode::decode(src).map_decoded(Self::DestBearerType)?,
406 TlvTag::DestNetworkId => Decode::decode(src).map_decoded(Self::DestNetworkId)?,
407 TlvTag::DestNetworkType => Decode::decode(src).map_decoded(Self::DestNetworkType)?,
408 TlvTag::DestNodeId => {
409 DecodeWithLength::decode(src, length).map_decoded(Self::DestNodeId)?
410 }
411 TlvTag::DestSubaddress => {
412 DecodeWithLength::decode(src, length).map_decoded(Self::DestSubaddress)?
413 }
414 TlvTag::DestTelematicsId => Decode::decode(src).map_decoded(Self::DestTelematicsId)?,
415 TlvTag::DestPort => Decode::decode(src).map_decoded(Self::DestPort)?,
416 TlvTag::DisplayTime => Decode::decode(src).map_decoded(Self::DisplayTime)?,
417 TlvTag::DpfResult => Decode::decode(src).map_decoded(Self::DpfResult)?,
418 TlvTag::ItsReplyType => Decode::decode(src).map_decoded(Self::ItsReplyType)?,
419 TlvTag::ItsSessionInfo => Decode::decode(src).map_decoded(Self::ItsSessionInfo)?,
420 TlvTag::LanguageIndicator => {
421 Decode::decode(src).map_decoded(Self::LanguageIndicator)?
422 }
423 TlvTag::MessagePayload => {
424 DecodeWithLength::decode(src, length).map_decoded(Self::MessagePayload)?
425 }
426 TlvTag::MessageState => Decode::decode(src).map_decoded(Self::MessageState)?,
427 TlvTag::MoreMessagesToSend => {
428 Decode::decode(src).map_decoded(Self::MoreMessagesToSend)?
429 }
430 TlvTag::MsAvailabilityStatus => {
431 Decode::decode(src).map_decoded(Self::MsAvailabilityStatus)?
432 }
433 TlvTag::MsMsgWaitFacilities => {
434 Decode::decode(src).map_decoded(Self::MsMsgWaitFacilities)?
435 }
436 TlvTag::MsValidity => {
437 DecodeWithLength::decode(src, length).map_decoded(Self::MsValidity)?
438 }
439 TlvTag::NetworkErrorCode => Decode::decode(src).map_decoded(Self::NetworkErrorCode)?,
440 TlvTag::NumberOfMessages => Decode::decode(src).map_decoded(Self::NumberOfMessages)?,
441 TlvTag::PayloadType => Decode::decode(src).map_decoded(Self::PayloadType)?,
442 TlvTag::PrivacyIndicator => Decode::decode(src).map_decoded(Self::PrivacyIndicator)?,
443 TlvTag::QosTimeToLive => Decode::decode(src).map_decoded(Self::QosTimeToLive)?,
444 TlvTag::ReceiptedMessageId => {
445 Decode::decode(src).map_decoded(Self::ReceiptedMessageId)?
446 }
447 TlvTag::SarMsgRefNum => Decode::decode(src).map_decoded(Self::SarMsgRefNum)?,
448 TlvTag::SarSegmentSeqnum => Decode::decode(src).map_decoded(Self::SarSegmentSeqnum)?,
449 TlvTag::SarTotalSegments => Decode::decode(src).map_decoded(Self::SarTotalSegments)?,
450 TlvTag::ScInterfaceVersion => {
451 Decode::decode(src).map_decoded(Self::ScInterfaceVersion)?
452 }
453 TlvTag::SetDpf => Decode::decode(src).map_decoded(Self::SetDpf)?,
454 TlvTag::SmsSignal => Decode::decode(src).map_decoded(Self::SmsSignal)?,
455 TlvTag::SourceAddrSubunit => {
456 Decode::decode(src).map_decoded(Self::SourceAddrSubunit)?
457 }
458 TlvTag::SourceBearerType => Decode::decode(src).map_decoded(Self::SourceBearerType)?,
459 TlvTag::SourceNetworkId => Decode::decode(src).map_decoded(Self::SourceNetworkId)?,
460 TlvTag::SourceNetworkType => {
461 Decode::decode(src).map_decoded(Self::SourceNetworkType)?
462 }
463 TlvTag::SourceNodeId => {
464 DecodeWithLength::decode(src, length).map_decoded(Self::SourceNodeId)?
465 }
466 TlvTag::SourcePort => Decode::decode(src).map_decoded(Self::SourcePort)?,
467 TlvTag::SourceSubaddress => {
468 DecodeWithLength::decode(src, length).map_decoded(Self::SourceSubaddress)?
469 }
470 TlvTag::SourceTelematicsId => {
471 Decode::decode(src).map_decoded(Self::SourceTelematicsId)?
472 }
473 TlvTag::UserMessageReference => {
474 Decode::decode(src).map_decoded(Self::UserMessageReference)?
475 }
476 TlvTag::UserResponseCode => Decode::decode(src).map_decoded(Self::UserResponseCode)?,
477 TlvTag::UssdServiceOp => Decode::decode(src).map_decoded(Self::UssdServiceOp)?,
478 TlvTag::Other(other) => {
479 DecodeWithLength::decode(src, length).map_decoded(|value| TlvValue::Other {
480 tag: TlvTag::Other(other),
481 value,
482 })?
483 }
484 };
485
486 Ok((value, size))
487 }
488}