Decode

Trait Decode 

Source
pub trait Decode<'a>: 'a + Sized {
    // Required method
    fn decode(src: &'a [u8]) -> Result<(Self, usize), DecodeError>;
}
Expand description

Trait for decoding SMPP values from a slice.

§Implementation


#[derive(Debug, PartialEq, Eq)]
struct Foo {
    a: u8,
    b: u16,
    c: u32,
}

impl<'a> Decode<'a> for Foo {
    fn decode(src: &'a [u8]) -> Result<(Self, usize), DecodeError> {
        let index = 0;

        let (a, size) = Decode::decode(&src[index..])?;
        let index = index + size;

        let (b, size) = Decode::decode(&src[index..])?;
        let index = index + size;

        let (c, size) = Decode::decode(&src[index..])?;
        let index = index + size;

        Ok((Foo { a, b, c }, index))
    }
}

let buf = &[0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08];

let expected = Foo {
    a: 0x01,
    b: 0x0203,
    c: 0x04050607,
};

let (foo, size) = Foo::decode(buf).unwrap();

assert_eq!(size, 7);
assert_eq!(foo, expected);
assert_eq!(&buf[size..], &[0x08]);

Required Methods§

Source

fn decode(src: &'a [u8]) -> Result<(Self, usize), DecodeError>

Decode a value from a slice.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Decode<'_> for u8

Source§

fn decode(src: &[u8]) -> Result<(Self, usize), DecodeError>

Source§

impl Decode<'_> for u16

Source§

fn decode(src: &[u8]) -> Result<(Self, usize), DecodeError>

Source§

impl Decode<'_> for u32

Source§

fn decode(src: &[u8]) -> Result<(Self, usize), DecodeError>

Implementors§

Source§

impl<'a> Decode<'a> for CommandId

Source§

impl<'a> Decode<'a> for CommandStatus

Source§

impl<'a> Decode<'a> for TlvTag

Source§

impl<'a> Decode<'a> for UdhId

Source§

impl<'a> Decode<'a> for DestAddress<'a>

Source§

impl<'a> Decode<'a> for AddrSubunit

Source§

impl<'a> Decode<'a> for AlertOnMessageDelivery

Source§

impl<'a> Decode<'a> for Ansi41Specific

Source§

impl<'a> Decode<'a> for BearerType

Source§

impl<'a> Decode<'a> for BroadcastAreaFormat

Source§

impl<'a> Decode<'a> for BroadcastAreaSuccess

Source§

impl<'a> Decode<'a> for BroadcastChannelIndicator

Source§

impl<'a> Decode<'a> for BroadcastMessageClass

Source§

impl<'a> Decode<'a> for CongestionState

Source§

impl<'a> Decode<'a> for DataCoding

Source§

impl<'a> Decode<'a> for DeliveryFailureReason

Source§

impl<'a> Decode<'a> for DestAddrNpResolution

Source§

impl<'a> Decode<'a> for DestFlag

Source§

impl<'a> Decode<'a> for DisplayTime

Source§

impl<'a> Decode<'a> for DpfResult

Source§

impl<'a> Decode<'a> for EncodingContentType

Source§

impl<'a> Decode<'a> for ErrorCodeNetworkType

Source§

impl<'a> Decode<'a> for GsmFeatures

Source§

impl<'a> Decode<'a> for Indicator

Source§

impl<'a> Decode<'a> for InterfaceVersion

Source§

impl<'a> Decode<'a> for IntermediateNotification

Source§

impl<'a> Decode<'a> for ItsReplyType

Source§

impl<'a> Decode<'a> for LanguageIndicator

Source§

impl<'a> Decode<'a> for MCDeliveryReceipt

Source§

impl<'a> Decode<'a> for MessageState

Source§

impl<'a> Decode<'a> for MessageType

Source§

impl<'a> Decode<'a> for MessagingMode

Source§

impl<'a> Decode<'a> for MoreMessagesToSend

Source§

impl<'a> Decode<'a> for MsAvailabilityStatus

Source§

impl<'a> Decode<'a> for MsValidityBehavior

Source§

impl<'a> Decode<'a> for NetworkType

Source§

impl<'a> Decode<'a> for Npi

Source§

impl<'a> Decode<'a> for NumberOfMessages

Source§

impl<'a> Decode<'a> for PayloadType

Source§

impl<'a> Decode<'a> for Presentation

Source§

impl<'a> Decode<'a> for PrivacyIndicator

Source§

impl<'a> Decode<'a> for ReplaceIfPresentFlag

Source§

impl<'a> Decode<'a> for Screening

Source§

impl<'a> Decode<'a> for SetDpf

Source§

impl<'a> Decode<'a> for SmeOriginatedAcknowledgement

Source§

impl<'a> Decode<'a> for SubaddressTag

Source§

impl<'a> Decode<'a> for Ton

Source§

impl<'a> Decode<'a> for TypeOfMessage

Source§

impl<'a> Decode<'a> for TypeOfNetwork

Source§

impl<'a> Decode<'a> for UnitOfTime

Source§

impl<'a> Decode<'a> for UnitsOfTime

Source§

impl<'a> Decode<'a> for UssdServiceOp

Source§

impl<'a> Decode<'a> for BindReceiver<'a>

Source§

impl<'a> Decode<'a> for BindTransceiver<'a>

Source§

impl<'a> Decode<'a> for BindTransmitter<'a>

Source§

impl<'a> Decode<'a> for CancelSm<'a>

Source§

impl<'a> Decode<'a> for Outbind<'a>

Source§

impl<'a> Decode<'a> for QuerySm<'a>

Source§

impl<'a> Decode<'a> for QuerySmResp<'a>

Source§

impl<'a> Decode<'a> for Tlv<'a>

Source§

impl<'a> Decode<'a> for DistributionListName<'a>

Source§

impl<'a> Decode<'a> for ServiceType<'a>

Source§

impl<'a> Decode<'a> for SmeAddress<'a>

Source§

impl<'a> Decode<'a> for UnsuccessSme<'a>

Source§

impl<'a> Decode<'a> for BroadcastContentType

Source§

impl<'a> Decode<'a> for BroadcastFrequencyInterval

Source§

impl<'a> Decode<'a> for BroadcastRepNum

Source§

impl<'a> Decode<'a> for CallbackNumPresInd

Source§

impl<'a> Decode<'a> for EsmClass

Source§

impl<'a> Decode<'a> for ItsSessionInfo

Source§

impl<'a> Decode<'a> for MsMsgWaitFacilities

Source§

impl<'a> Decode<'a> for MsValidityInformation

Source§

impl<'a> Decode<'a> for NetworkErrorCode

Source§

impl<'a> Decode<'a> for PriorityFlag

Source§

impl<'a> Decode<'a> for RegisteredDelivery

Source§

impl<'a> Decode<'a> for UserMessageReference

Source§

impl<'a, const MIN: usize, const MAX: usize> Decode<'a> for COctetString<'a, MIN, MAX>

Source§

impl<'a, const N: usize> Decode<'a> for EmptyOrFullCOctetString<'a, N>