rusmpp_core/tlvs/borrowed/
value.rs

1use crate::{
2    CommandStatus,
3    decode::{
4        DecodeError, DecodeResultExt,
5        borrowed::{Decode, DecodeWithKey, DecodeWithLength},
6    },
7    encode::{Encode, Length},
8    tlvs::TlvTag,
9    types::borrowed::{AnyOctetString, COctetString, OctetString},
10    values::{borrowed::*, *},
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))]
18pub enum TlvValue<'a> {
19    AdditionalStatusInfoText(COctetString<'a, 1, 256>),
20    AlertOnMessageDelivery(AlertOnMessageDelivery),
21    BillingIdentification(OctetString<'a, 0, 1024>),
22    /// Identifies one or more target Broadcast Area(s) for which the
23    /// status information applies.
24    ///
25    /// The number of instances of this parameter will be exactly equal
26    /// to the number of occurrences of the broadcast_area_identifiers
27    /// parameter in the corresponding broadcast_sm.
28    BroadcastAreaIdentifier(BroadcastAreaIdentifier<'a>),
29    /// The success rate indicator, defined as the ratio of the
30    /// number of BTSs that accepted the message and the total
31    /// number of BTSs that should have accepted the message, for
32    /// a particular broadcast_area_identifier.
33    BroadcastAreaSuccess(BroadcastAreaSuccess),
34    BroadcastContentTypeInfo(OctetString<'a, 0, 255>),
35    BroadcastChannelIndicator(BroadcastChannelIndicator),
36    /// Specifies the content type of the message.
37    BroadcastContentType(BroadcastContentType),
38    /// Absolute time is formatted as a 16-character string (encoded as a 17-octet C-octet String)
39    /// “YYMMDDhhmmsstnnp” where:
40    ///
41    /// | Digits | Meaning |
42    /// |--------|---------|
43    /// | ‘YY’   | last two digits of the year (00-99)   |
44    /// | ‘MM’   | month (01-12)                         |
45    /// | ‘DD’   | day (01-31)                           |
46    /// | ‘hh’   | hour (00-23)                          |
47    /// | ‘mm’   | minute (00-59)                        |
48    /// | ‘ss’   | second (00-59)                        |
49    /// | ‘t’    | tenths of second (0-9)                |
50    /// | ‘nn’   | time difference in quarter hours between local time (as expressed in the first 13 octets) and UTC (Universal Time Constant) time (00-48). |
51    /// | ‘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. |
52    BroadcastEndTime(OctetString<'a, 0, 17>),
53    BroadcastErrorStatus(CommandStatus),
54    /// This field indicates the frequency interval at which
55    /// the broadcasts of a message should be repeated.
56    BroadcastFrequencyInterval(BroadcastFrequencyInterval),
57    BroadcastMessageClass(BroadcastMessageClass),
58    /// This field indicates the number of repeated
59    /// broadcasts of a message requested by the submitter.
60    BroadcastRepNum(BroadcastRepNum),
61    BroadcastServiceGroup(OctetString<'a, 1, 255>),
62    CallbackNum(OctetString<'a, 4, 19>),
63    CallbackNumAtag(OctetString<'a, 0, 65>),
64    CallbackNumPresInd(CallbackNumPresInd),
65    CongestionState(CongestionState),
66    DeliveryFailureReason(DeliveryFailureReason),
67    DestAddrNpCountry(OctetString<'a, 1, 5>),
68    DestAddrNpInformation(OctetString<'a, 0, 10>),
69    DestAddrNpResolution(DestAddrNpResolution),
70    DestAddrSubunit(AddrSubunit),
71    DestBearerType(BearerType),
72    DestNetworkId(COctetString<'a, 7, 66>),
73    DestNetworkType(NetworkType),
74    DestNodeId(OctetString<'a, 6, 6>),
75    DestSubaddress(Subaddress<'a>),
76    DestTelematicsId(u16),
77    DestPort(u16),
78    DisplayTime(DisplayTime),
79    DpfResult(DpfResult),
80    ItsReplyType(ItsReplyType),
81    ItsSessionInfo(ItsSessionInfo),
82    LanguageIndicator(LanguageIndicator),
83    MessagePayload(MessagePayload<'a>),
84    /// This field indicates the current status of the broadcast message.
85    MessageState(MessageState),
86    MoreMessagesToSend(MoreMessagesToSend),
87    MsAvailabilityStatus(MsAvailabilityStatus),
88    MsMsgWaitFacilities(MsMsgWaitFacilities),
89    MsValidity(MsValidity),
90    NetworkErrorCode(NetworkErrorCode),
91    NumberOfMessages(NumberOfMessages),
92    PayloadType(PayloadType),
93    PrivacyIndicator(PrivacyIndicator),
94    QosTimeToLive(u32),
95    ReceiptedMessageId(COctetString<'a, 1, 65>),
96    SarMsgRefNum(u16),
97    SarSegmentSeqnum(u8),
98    SarTotalSegments(u8),
99    ScInterfaceVersion(InterfaceVersion),
100    SetDpf(SetDpf),
101    /// Encoded as per [CMT-136]
102    SmsSignal(u16),
103    SourceAddrSubunit(AddrSubunit),
104    SourceBearerType(BearerType),
105    SourceNetworkId(COctetString<'a, 7, 66>),
106    SourceNetworkType(NetworkType),
107    SourceNodeId(OctetString<'a, 6, 6>),
108    SourcePort(u16),
109    SourceSubaddress(Subaddress<'a>),
110    SourceTelematicsId(u16),
111    UserMessageReference(UserMessageReference),
112    UserResponseCode(u8),
113    UssdServiceOp(UssdServiceOp),
114    Other {
115        tag: TlvTag,
116        value: AnyOctetString<'a>,
117    },
118}
119
120impl TlvValue<'_> {
121    pub const fn tag(&self) -> TlvTag {
122        match self {
123            TlvValue::AdditionalStatusInfoText(_) => TlvTag::AdditionalStatusInfoText,
124            TlvValue::AlertOnMessageDelivery(_) => TlvTag::AlertOnMessageDelivery,
125            TlvValue::BillingIdentification(_) => TlvTag::BillingIdentification,
126            TlvValue::BroadcastAreaIdentifier(_) => TlvTag::BroadcastAreaIdentifier,
127            TlvValue::BroadcastAreaSuccess(_) => TlvTag::BroadcastAreaSuccess,
128            TlvValue::BroadcastContentTypeInfo(_) => TlvTag::BroadcastContentTypeInfo,
129            TlvValue::BroadcastChannelIndicator(_) => TlvTag::BroadcastChannelIndicator,
130            TlvValue::BroadcastContentType(_) => TlvTag::BroadcastContentType,
131            TlvValue::BroadcastEndTime(_) => TlvTag::BroadcastEndTime,
132            TlvValue::BroadcastErrorStatus(_) => TlvTag::BroadcastErrorStatus,
133            TlvValue::BroadcastFrequencyInterval(_) => TlvTag::BroadcastFrequencyInterval,
134            TlvValue::BroadcastMessageClass(_) => TlvTag::BroadcastMessageClass,
135            TlvValue::BroadcastRepNum(_) => TlvTag::BroadcastRepNum,
136            TlvValue::BroadcastServiceGroup(_) => TlvTag::BroadcastServiceGroup,
137            TlvValue::CallbackNum(_) => TlvTag::CallbackNum,
138            TlvValue::CallbackNumAtag(_) => TlvTag::CallbackNumAtag,
139            TlvValue::CallbackNumPresInd(_) => TlvTag::CallbackNumPresInd,
140            TlvValue::CongestionState(_) => TlvTag::CongestionState,
141            TlvValue::DeliveryFailureReason(_) => TlvTag::DeliveryFailureReason,
142            TlvValue::DestAddrNpCountry(_) => TlvTag::DestAddrNpCountry,
143            TlvValue::DestAddrNpInformation(_) => TlvTag::DestAddrNpInformation,
144            TlvValue::DestAddrNpResolution(_) => TlvTag::DestAddrNpResolution,
145            TlvValue::DestAddrSubunit(_) => TlvTag::DestAddrSubunit,
146            TlvValue::DestBearerType(_) => TlvTag::DestBearerType,
147            TlvValue::DestNetworkId(_) => TlvTag::DestNetworkId,
148            TlvValue::DestNetworkType(_) => TlvTag::DestNetworkType,
149            TlvValue::DestNodeId(_) => TlvTag::DestNodeId,
150            TlvValue::DestSubaddress(_) => TlvTag::DestSubaddress,
151            TlvValue::DestTelematicsId(_) => TlvTag::DestTelematicsId,
152            TlvValue::DestPort(_) => TlvTag::DestPort,
153            TlvValue::DisplayTime(_) => TlvTag::DisplayTime,
154            TlvValue::DpfResult(_) => TlvTag::DpfResult,
155            TlvValue::ItsReplyType(_) => TlvTag::ItsReplyType,
156            TlvValue::ItsSessionInfo(_) => TlvTag::ItsSessionInfo,
157            TlvValue::LanguageIndicator(_) => TlvTag::LanguageIndicator,
158            TlvValue::MessagePayload(_) => TlvTag::MessagePayload,
159            TlvValue::MessageState(_) => TlvTag::MessageState,
160            TlvValue::MoreMessagesToSend(_) => TlvTag::MoreMessagesToSend,
161            TlvValue::MsAvailabilityStatus(_) => TlvTag::MsAvailabilityStatus,
162            TlvValue::MsMsgWaitFacilities(_) => TlvTag::MsMsgWaitFacilities,
163            TlvValue::MsValidity(_) => TlvTag::MsValidity,
164            TlvValue::NetworkErrorCode(_) => TlvTag::NetworkErrorCode,
165            TlvValue::NumberOfMessages(_) => TlvTag::NumberOfMessages,
166            TlvValue::PayloadType(_) => TlvTag::PayloadType,
167            TlvValue::PrivacyIndicator(_) => TlvTag::PrivacyIndicator,
168            TlvValue::QosTimeToLive(_) => TlvTag::QosTimeToLive,
169            TlvValue::ReceiptedMessageId(_) => TlvTag::ReceiptedMessageId,
170            TlvValue::SarMsgRefNum(_) => TlvTag::SarMsgRefNum,
171            TlvValue::SarSegmentSeqnum(_) => TlvTag::SarSegmentSeqnum,
172            TlvValue::SarTotalSegments(_) => TlvTag::SarTotalSegments,
173            TlvValue::ScInterfaceVersion(_) => TlvTag::ScInterfaceVersion,
174            TlvValue::SetDpf(_) => TlvTag::SetDpf,
175            TlvValue::SmsSignal(_) => TlvTag::SmsSignal,
176            TlvValue::SourceAddrSubunit(_) => TlvTag::SourceAddrSubunit,
177            TlvValue::SourceBearerType(_) => TlvTag::SourceBearerType,
178            TlvValue::SourceNetworkId(_) => TlvTag::SourceNetworkId,
179            TlvValue::SourceNetworkType(_) => TlvTag::SourceNetworkType,
180            TlvValue::SourceNodeId(_) => TlvTag::SourceNodeId,
181            TlvValue::SourcePort(_) => TlvTag::SourcePort,
182            TlvValue::SourceSubaddress(_) => TlvTag::SourceSubaddress,
183            TlvValue::SourceTelematicsId(_) => TlvTag::SourceTelematicsId,
184            TlvValue::UserMessageReference(_) => TlvTag::UserMessageReference,
185            TlvValue::UserResponseCode(_) => TlvTag::UserResponseCode,
186            TlvValue::UssdServiceOp(_) => TlvTag::UssdServiceOp,
187            TlvValue::Other { tag, .. } => *tag,
188        }
189    }
190}
191
192impl Length for TlvValue<'_> {
193    fn length(&self) -> usize {
194        match self {
195            TlvValue::AdditionalStatusInfoText(value) => value.length(),
196            TlvValue::AlertOnMessageDelivery(value) => value.length(),
197            TlvValue::BillingIdentification(value) => value.length(),
198            TlvValue::BroadcastAreaIdentifier(value) => value.length(),
199            TlvValue::BroadcastAreaSuccess(value) => value.length(),
200            TlvValue::BroadcastContentTypeInfo(value) => value.length(),
201            TlvValue::BroadcastChannelIndicator(value) => value.length(),
202            TlvValue::BroadcastContentType(value) => value.length(),
203            TlvValue::BroadcastEndTime(value) => value.length(),
204            TlvValue::BroadcastErrorStatus(value) => value.length(),
205            TlvValue::BroadcastFrequencyInterval(value) => value.length(),
206            TlvValue::BroadcastMessageClass(value) => value.length(),
207            TlvValue::BroadcastRepNum(value) => value.length(),
208            TlvValue::BroadcastServiceGroup(value) => value.length(),
209            TlvValue::CallbackNum(value) => value.length(),
210            TlvValue::CallbackNumAtag(value) => value.length(),
211            TlvValue::CallbackNumPresInd(value) => value.length(),
212            TlvValue::CongestionState(value) => value.length(),
213            TlvValue::DeliveryFailureReason(value) => value.length(),
214            TlvValue::DestAddrNpCountry(value) => value.length(),
215            TlvValue::DestAddrNpInformation(value) => value.length(),
216            TlvValue::DestAddrNpResolution(value) => value.length(),
217            TlvValue::DestAddrSubunit(value) => value.length(),
218            TlvValue::DestBearerType(value) => value.length(),
219            TlvValue::DestNetworkId(value) => value.length(),
220            TlvValue::DestNetworkType(value) => value.length(),
221            TlvValue::DestNodeId(value) => value.length(),
222            TlvValue::DestSubaddress(value) => value.length(),
223            TlvValue::DestTelematicsId(value) => value.length(),
224            TlvValue::DestPort(value) => value.length(),
225            TlvValue::DisplayTime(value) => value.length(),
226            TlvValue::DpfResult(value) => value.length(),
227            TlvValue::ItsReplyType(value) => value.length(),
228            TlvValue::ItsSessionInfo(value) => value.length(),
229            TlvValue::LanguageIndicator(value) => value.length(),
230            TlvValue::MessagePayload(value) => value.length(),
231            TlvValue::MessageState(value) => value.length(),
232            TlvValue::MoreMessagesToSend(value) => value.length(),
233            TlvValue::MsAvailabilityStatus(value) => value.length(),
234            TlvValue::MsMsgWaitFacilities(value) => value.length(),
235            TlvValue::MsValidity(value) => value.length(),
236            TlvValue::NetworkErrorCode(value) => value.length(),
237            TlvValue::NumberOfMessages(value) => value.length(),
238            TlvValue::PayloadType(value) => value.length(),
239            TlvValue::PrivacyIndicator(value) => value.length(),
240            TlvValue::QosTimeToLive(value) => value.length(),
241            TlvValue::ReceiptedMessageId(value) => value.length(),
242            TlvValue::SarMsgRefNum(value) => value.length(),
243            TlvValue::SarSegmentSeqnum(value) => value.length(),
244            TlvValue::SarTotalSegments(value) => value.length(),
245            TlvValue::ScInterfaceVersion(value) => value.length(),
246            TlvValue::SetDpf(value) => value.length(),
247            TlvValue::SmsSignal(value) => value.length(),
248            TlvValue::SourceAddrSubunit(value) => value.length(),
249            TlvValue::SourceBearerType(value) => value.length(),
250            TlvValue::SourceNetworkId(value) => value.length(),
251            TlvValue::SourceNetworkType(value) => value.length(),
252            TlvValue::SourceNodeId(value) => value.length(),
253            TlvValue::SourcePort(value) => value.length(),
254            TlvValue::SourceSubaddress(value) => value.length(),
255            TlvValue::SourceTelematicsId(value) => value.length(),
256            TlvValue::UserMessageReference(value) => value.length(),
257            TlvValue::UserResponseCode(value) => value.length(),
258            TlvValue::UssdServiceOp(value) => value.length(),
259            TlvValue::Other { value, .. } => value.length(),
260        }
261    }
262}
263
264impl Encode for TlvValue<'_> {
265    fn encode(&self, dst: &mut [u8]) -> usize {
266        match self {
267            TlvValue::AdditionalStatusInfoText(value) => value.encode(dst),
268            TlvValue::AlertOnMessageDelivery(value) => value.encode(dst),
269            TlvValue::BillingIdentification(value) => value.encode(dst),
270            TlvValue::BroadcastAreaIdentifier(value) => value.encode(dst),
271            TlvValue::BroadcastAreaSuccess(value) => value.encode(dst),
272            TlvValue::BroadcastContentTypeInfo(value) => value.encode(dst),
273            TlvValue::BroadcastChannelIndicator(value) => value.encode(dst),
274            TlvValue::BroadcastContentType(value) => value.encode(dst),
275            TlvValue::BroadcastEndTime(value) => value.encode(dst),
276            TlvValue::BroadcastErrorStatus(value) => value.encode(dst),
277            TlvValue::BroadcastFrequencyInterval(value) => value.encode(dst),
278            TlvValue::BroadcastMessageClass(value) => value.encode(dst),
279            TlvValue::BroadcastRepNum(value) => value.encode(dst),
280            TlvValue::BroadcastServiceGroup(value) => value.encode(dst),
281            TlvValue::CallbackNum(value) => value.encode(dst),
282            TlvValue::CallbackNumAtag(value) => value.encode(dst),
283            TlvValue::CallbackNumPresInd(value) => value.encode(dst),
284            TlvValue::CongestionState(value) => value.encode(dst),
285            TlvValue::DeliveryFailureReason(value) => value.encode(dst),
286            TlvValue::DestAddrNpCountry(value) => value.encode(dst),
287            TlvValue::DestAddrNpInformation(value) => value.encode(dst),
288            TlvValue::DestAddrNpResolution(value) => value.encode(dst),
289            TlvValue::DestAddrSubunit(value) => value.encode(dst),
290            TlvValue::DestBearerType(value) => value.encode(dst),
291            TlvValue::DestNetworkId(value) => value.encode(dst),
292            TlvValue::DestNetworkType(value) => value.encode(dst),
293            TlvValue::DestNodeId(value) => value.encode(dst),
294            TlvValue::DestSubaddress(value) => value.encode(dst),
295            TlvValue::DestTelematicsId(value) => value.encode(dst),
296            TlvValue::DestPort(value) => value.encode(dst),
297            TlvValue::DisplayTime(value) => value.encode(dst),
298            TlvValue::DpfResult(value) => value.encode(dst),
299            TlvValue::ItsReplyType(value) => value.encode(dst),
300            TlvValue::ItsSessionInfo(value) => value.encode(dst),
301            TlvValue::LanguageIndicator(value) => value.encode(dst),
302            TlvValue::MessagePayload(value) => value.encode(dst),
303            TlvValue::MessageState(value) => value.encode(dst),
304            TlvValue::MoreMessagesToSend(value) => value.encode(dst),
305            TlvValue::MsAvailabilityStatus(value) => value.encode(dst),
306            TlvValue::MsMsgWaitFacilities(value) => value.encode(dst),
307            TlvValue::MsValidity(value) => value.encode(dst),
308            TlvValue::NetworkErrorCode(value) => value.encode(dst),
309            TlvValue::NumberOfMessages(value) => value.encode(dst),
310            TlvValue::PayloadType(value) => value.encode(dst),
311            TlvValue::PrivacyIndicator(value) => value.encode(dst),
312            TlvValue::QosTimeToLive(value) => value.encode(dst),
313            TlvValue::ReceiptedMessageId(value) => value.encode(dst),
314            TlvValue::SarMsgRefNum(value) => value.encode(dst),
315            TlvValue::SarSegmentSeqnum(value) => value.encode(dst),
316            TlvValue::SarTotalSegments(value) => value.encode(dst),
317            TlvValue::ScInterfaceVersion(value) => value.encode(dst),
318            TlvValue::SetDpf(value) => value.encode(dst),
319            TlvValue::SmsSignal(value) => value.encode(dst),
320            TlvValue::SourceAddrSubunit(value) => value.encode(dst),
321            TlvValue::SourceBearerType(value) => value.encode(dst),
322            TlvValue::SourceNetworkId(value) => value.encode(dst),
323            TlvValue::SourceNetworkType(value) => value.encode(dst),
324            TlvValue::SourceNodeId(value) => value.encode(dst),
325            TlvValue::SourcePort(value) => value.encode(dst),
326            TlvValue::SourceSubaddress(value) => value.encode(dst),
327            TlvValue::SourceTelematicsId(value) => value.encode(dst),
328            TlvValue::UserMessageReference(value) => value.encode(dst),
329            TlvValue::UserResponseCode(value) => value.encode(dst),
330            TlvValue::UssdServiceOp(value) => value.encode(dst),
331            TlvValue::Other { value, .. } => value.encode(dst),
332        }
333    }
334}
335
336impl<'a> DecodeWithKey<'a> for TlvValue<'a> {
337    type Key = TlvTag;
338
339    fn decode(key: Self::Key, src: &'a [u8], length: usize) -> Result<(Self, usize), DecodeError> {
340        let (value, size) = match key {
341            TlvTag::AdditionalStatusInfoText => {
342                Decode::decode(src).map_decoded(Self::AdditionalStatusInfoText)?
343            }
344            TlvTag::AlertOnMessageDelivery => {
345                Decode::decode(src).map_decoded(Self::AlertOnMessageDelivery)?
346            }
347            TlvTag::BillingIdentification => {
348                DecodeWithLength::decode(src, length).map_decoded(Self::BillingIdentification)?
349            }
350            TlvTag::BroadcastAreaIdentifier => {
351                DecodeWithLength::decode(src, length).map_decoded(Self::BroadcastAreaIdentifier)?
352            }
353            TlvTag::BroadcastAreaSuccess => {
354                Decode::decode(src).map_decoded(Self::BroadcastAreaSuccess)?
355            }
356            TlvTag::BroadcastContentTypeInfo => {
357                DecodeWithLength::decode(src, length).map_decoded(Self::BroadcastContentTypeInfo)?
358            }
359            TlvTag::BroadcastChannelIndicator => {
360                Decode::decode(src).map_decoded(Self::BroadcastChannelIndicator)?
361            }
362            TlvTag::BroadcastContentType => {
363                Decode::decode(src).map_decoded(Self::BroadcastContentType)?
364            }
365            TlvTag::BroadcastEndTime => {
366                DecodeWithLength::decode(src, length).map_decoded(Self::BroadcastEndTime)?
367            }
368            TlvTag::BroadcastErrorStatus => {
369                Decode::decode(src).map_decoded(Self::BroadcastErrorStatus)?
370            }
371            TlvTag::BroadcastFrequencyInterval => {
372                Decode::decode(src).map_decoded(Self::BroadcastFrequencyInterval)?
373            }
374            TlvTag::BroadcastMessageClass => {
375                Decode::decode(src).map_decoded(Self::BroadcastMessageClass)?
376            }
377            TlvTag::BroadcastRepNum => Decode::decode(src).map_decoded(Self::BroadcastRepNum)?,
378            TlvTag::BroadcastServiceGroup => {
379                DecodeWithLength::decode(src, length).map_decoded(Self::BroadcastServiceGroup)?
380            }
381            TlvTag::CallbackNum => {
382                DecodeWithLength::decode(src, length).map_decoded(Self::CallbackNum)?
383            }
384            TlvTag::CallbackNumAtag => {
385                DecodeWithLength::decode(src, length).map_decoded(Self::CallbackNumAtag)?
386            }
387            TlvTag::CallbackNumPresInd => {
388                Decode::decode(src).map_decoded(Self::CallbackNumPresInd)?
389            }
390            TlvTag::CongestionState => Decode::decode(src).map_decoded(Self::CongestionState)?,
391            TlvTag::DeliveryFailureReason => {
392                Decode::decode(src).map_decoded(Self::DeliveryFailureReason)?
393            }
394            TlvTag::DestAddrNpCountry => {
395                DecodeWithLength::decode(src, length).map_decoded(Self::DestAddrNpCountry)?
396            }
397            TlvTag::DestAddrNpInformation => {
398                DecodeWithLength::decode(src, length).map_decoded(Self::DestAddrNpInformation)?
399            }
400            TlvTag::DestAddrNpResolution => {
401                Decode::decode(src).map_decoded(Self::DestAddrNpResolution)?
402            }
403            TlvTag::DestAddrSubunit => Decode::decode(src).map_decoded(Self::DestAddrSubunit)?,
404            TlvTag::DestBearerType => Decode::decode(src).map_decoded(Self::DestBearerType)?,
405            TlvTag::DestNetworkId => Decode::decode(src).map_decoded(Self::DestNetworkId)?,
406            TlvTag::DestNetworkType => Decode::decode(src).map_decoded(Self::DestNetworkType)?,
407            TlvTag::DestNodeId => {
408                DecodeWithLength::decode(src, length).map_decoded(Self::DestNodeId)?
409            }
410            TlvTag::DestSubaddress => {
411                DecodeWithLength::decode(src, length).map_decoded(Self::DestSubaddress)?
412            }
413            TlvTag::DestTelematicsId => Decode::decode(src).map_decoded(Self::DestTelematicsId)?,
414            TlvTag::DestPort => Decode::decode(src).map_decoded(Self::DestPort)?,
415            TlvTag::DisplayTime => Decode::decode(src).map_decoded(Self::DisplayTime)?,
416            TlvTag::DpfResult => Decode::decode(src).map_decoded(Self::DpfResult)?,
417            TlvTag::ItsReplyType => Decode::decode(src).map_decoded(Self::ItsReplyType)?,
418            TlvTag::ItsSessionInfo => Decode::decode(src).map_decoded(Self::ItsSessionInfo)?,
419            TlvTag::LanguageIndicator => {
420                Decode::decode(src).map_decoded(Self::LanguageIndicator)?
421            }
422            TlvTag::MessagePayload => {
423                DecodeWithLength::decode(src, length).map_decoded(Self::MessagePayload)?
424            }
425            TlvTag::MessageState => Decode::decode(src).map_decoded(Self::MessageState)?,
426            TlvTag::MoreMessagesToSend => {
427                Decode::decode(src).map_decoded(Self::MoreMessagesToSend)?
428            }
429            TlvTag::MsAvailabilityStatus => {
430                Decode::decode(src).map_decoded(Self::MsAvailabilityStatus)?
431            }
432            TlvTag::MsMsgWaitFacilities => {
433                Decode::decode(src).map_decoded(Self::MsMsgWaitFacilities)?
434            }
435            TlvTag::MsValidity => {
436                DecodeWithLength::decode(src, length).map_decoded(Self::MsValidity)?
437            }
438            TlvTag::NetworkErrorCode => Decode::decode(src).map_decoded(Self::NetworkErrorCode)?,
439            TlvTag::NumberOfMessages => Decode::decode(src).map_decoded(Self::NumberOfMessages)?,
440            TlvTag::PayloadType => Decode::decode(src).map_decoded(Self::PayloadType)?,
441            TlvTag::PrivacyIndicator => Decode::decode(src).map_decoded(Self::PrivacyIndicator)?,
442            TlvTag::QosTimeToLive => Decode::decode(src).map_decoded(Self::QosTimeToLive)?,
443            TlvTag::ReceiptedMessageId => {
444                Decode::decode(src).map_decoded(Self::ReceiptedMessageId)?
445            }
446            TlvTag::SarMsgRefNum => Decode::decode(src).map_decoded(Self::SarMsgRefNum)?,
447            TlvTag::SarSegmentSeqnum => Decode::decode(src).map_decoded(Self::SarSegmentSeqnum)?,
448            TlvTag::SarTotalSegments => Decode::decode(src).map_decoded(Self::SarTotalSegments)?,
449            TlvTag::ScInterfaceVersion => {
450                Decode::decode(src).map_decoded(Self::ScInterfaceVersion)?
451            }
452            TlvTag::SetDpf => Decode::decode(src).map_decoded(Self::SetDpf)?,
453            TlvTag::SmsSignal => Decode::decode(src).map_decoded(Self::SmsSignal)?,
454            TlvTag::SourceAddrSubunit => {
455                Decode::decode(src).map_decoded(Self::SourceAddrSubunit)?
456            }
457            TlvTag::SourceBearerType => Decode::decode(src).map_decoded(Self::SourceBearerType)?,
458            TlvTag::SourceNetworkId => Decode::decode(src).map_decoded(Self::SourceNetworkId)?,
459            TlvTag::SourceNetworkType => {
460                Decode::decode(src).map_decoded(Self::SourceNetworkType)?
461            }
462            TlvTag::SourceNodeId => {
463                DecodeWithLength::decode(src, length).map_decoded(Self::SourceNodeId)?
464            }
465            TlvTag::SourcePort => Decode::decode(src).map_decoded(Self::SourcePort)?,
466            TlvTag::SourceSubaddress => {
467                DecodeWithLength::decode(src, length).map_decoded(Self::SourceSubaddress)?
468            }
469            TlvTag::SourceTelematicsId => {
470                Decode::decode(src).map_decoded(Self::SourceTelematicsId)?
471            }
472            TlvTag::UserMessageReference => {
473                Decode::decode(src).map_decoded(Self::UserMessageReference)?
474            }
475            TlvTag::UserResponseCode => Decode::decode(src).map_decoded(Self::UserResponseCode)?,
476            TlvTag::UssdServiceOp => Decode::decode(src).map_decoded(Self::UssdServiceOp)?,
477            TlvTag::Other(other) => {
478                DecodeWithLength::decode(src, length).map_decoded(|value| TlvValue::Other {
479                    tag: TlvTag::Other(other),
480                    value,
481                })?
482            }
483        };
484
485        Ok((value, size))
486    }
487}