rusmpp_core/tlvs/owned/
value.rs

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/// See module level documentation.
14#[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    /// Identifies one or more target Broadcast Area(s) for which the
24    /// status information applies.
25    ///
26    /// The number of instances of this parameter will be exactly equal
27    /// to the number of occurrences of the broadcast_area_identifiers
28    /// parameter in the corresponding broadcast_sm.
29    BroadcastAreaIdentifier(BroadcastAreaIdentifier),
30    /// The success rate indicator, defined as the ratio of the
31    /// number of BTSs that accepted the message and the total
32    /// number of BTSs that should have accepted the message, for
33    /// a particular broadcast_area_identifier.
34    BroadcastAreaSuccess(BroadcastAreaSuccess),
35    BroadcastContentTypeInfo(OctetString<0, 255>),
36    BroadcastChannelIndicator(BroadcastChannelIndicator),
37    /// Specifies the content type of the message.
38    BroadcastContentType(BroadcastContentType),
39    /// Absolute time is formatted as a 16-character string (encoded as a 17-octet C-octet String)
40    /// “YYMMDDhhmmsstnnp” where:
41    ///
42    /// | Digits | Meaning |
43    /// |--------|---------|
44    /// | ‘YY’   | last two digits of the year (00-99)   |
45    /// | ‘MM’   | month (01-12)                         |
46    /// | ‘DD’   | day (01-31)                           |
47    /// | ‘hh’   | hour (00-23)                          |
48    /// | ‘mm’   | minute (00-59)                        |
49    /// | ‘ss’   | second (00-59)                        |
50    /// | ‘t’    | tenths of second (0-9)                |
51    /// | ‘nn’   | time difference in quarter hours between local time (as expressed in the first 13 octets) and UTC (Universal Time Constant) time (00-48). |
52    /// | ‘p’    | “+” Local time is in quarter hours advanced in relation to UTC time. “-” Local time is in quarter hours retarded in relation to UTC time. |
53    BroadcastEndTime(OctetString<0, 17>),
54    BroadcastErrorStatus(CommandStatus),
55    /// This field indicates the frequency interval at which
56    /// the broadcasts of a message should be repeated.
57    BroadcastFrequencyInterval(BroadcastFrequencyInterval),
58    BroadcastMessageClass(BroadcastMessageClass),
59    /// This field indicates the number of repeated
60    /// broadcasts of a message requested by the submitter.
61    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    /// This field indicates the current status of the broadcast message.
86    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    /// Encoded as per [CMT-136]
103    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}