pub trait Codec<'a>: Debug + Sized {
// Required methods
fn encode(&self, bytes: &mut Vec<u8>);
fn read(_: &mut Reader<'a>) -> Result<Self, InvalidMessage>;
// Provided methods
fn get_encoding(&self) -> Vec<u8> ⓘ { ... }
fn read_bytes(bytes: &'a [u8]) -> Result<Self, InvalidMessage> { ... }
}
Expand description
Trait for implementing encoding and decoding functionality on something.
Required Methods§
Sourcefn encode(&self, bytes: &mut Vec<u8>)
fn encode(&self, bytes: &mut Vec<u8>)
Function for encoding itself by appending itself to the provided vec of bytes.
Sourcefn read(_: &mut Reader<'a>) -> Result<Self, InvalidMessage>
fn read(_: &mut Reader<'a>) -> Result<Self, InvalidMessage>
Function for decoding itself from the provided reader will return Some if the decoding was successful or None if it was not.
Provided Methods§
Sourcefn get_encoding(&self) -> Vec<u8> ⓘ
fn get_encoding(&self) -> Vec<u8> ⓘ
Convenience function for encoding the implementation into a vec and returning it
Sourcefn read_bytes(bytes: &'a [u8]) -> Result<Self, InvalidMessage>
fn read_bytes(bytes: &'a [u8]) -> Result<Self, InvalidMessage>
Function for wrapping a call to the read function in a Reader for the slice of bytes provided
Returns Err(InvalidMessage::ExcessData(_))
if
Self::read
does not read the entirety of bytes
.
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<'a> Codec<'a> for CertificateDer<'a>
impl<'a> Codec<'a> for CertificateDer<'a>
Source§impl<'a, T: Codec<'a> + TlsListElement + Debug> Codec<'a> for Vec<T>
Implement Codec
for lists of elements that implement TlsListElement
.
impl<'a, T: Codec<'a> + TlsListElement + Debug> Codec<'a> for Vec<T>
Implement Codec
for lists of elements that implement TlsListElement
.
TlsListElement
provides the size of the length prefix for the list.
Implementors§
impl Codec<'_> for AlertDescription
impl Codec<'_> for CertificateCompressionAlgorithm
impl Codec<'_> for CipherSuite
impl Codec<'_> for ContentType
impl Codec<'_> for HandshakeType
impl Codec<'_> for NamedGroup
impl Codec<'_> for ProtocolVersion
impl Codec<'_> for SignatureAlgorithm
impl Codec<'_> for SignatureScheme
impl Codec<'_> for CertificateType
impl Codec<'_> for EchClientHelloType
impl Codec<'_> for AlertLevel
impl Codec<'_> for CertificateStatusType
impl Codec<'_> for ClientCertificateType
impl Codec<'_> for Compression
impl Codec<'_> for ECCurveType
impl Codec<'_> for ECPointFormat
impl Codec<'_> for EchVersion
impl Codec<'_> for ExtensionType
impl Codec<'_> for HashAlgorithm
impl Codec<'_> for HeartbeatMessageType
impl Codec<'_> for HeartbeatMode
impl Codec<'_> for HpkeAead
impl Codec<'_> for HpkeKdf
impl Codec<'_> for HpkeKem
impl Codec<'_> for KeyUpdateRequest
impl Codec<'_> for NamedCurve
impl Codec<'_> for PskKeyExchangeMode
impl Codec<'_> for ServerNameType
impl Codec<'_> for CertificateStatusRequest
impl Codec<'_> for EchConfigExtension
impl Codec<'_> for EchConfigPayload
impl Codec<'_> for EncryptedClientHello
impl Codec<'_> for ServerKeyExchangePayload
impl Codec<'_> for DigitallySignedStruct
impl Codec<'_> for DistinguishedName
impl Codec<'_> for AlertMessagePayload
impl Codec<'_> for ChangeCipherSpecPayload
impl Codec<'_> for CertificateRequestExtensions
impl Codec<'_> for CertificateRequestPayload
impl Codec<'_> for CertificateRequestPayloadTls13
impl Codec<'_> for ClientDhParams
impl Codec<'_> for ClientEcdhParams
impl Codec<'_> for ClientHelloPayload
impl Codec<'_> for EcParameters
impl Codec<'_> for EchConfigContents
impl Codec<'_> for EncryptedClientHelloOuter
impl Codec<'_> for HelloRetryRequest
impl Codec<'_> for HpkeKeyConfig
impl Codec<'_> for HpkeSymmetricCipherSuite
impl Codec<'_> for NewSessionTicketExtensions
impl Codec<'_> for NewSessionTicketPayload
impl Codec<'_> for NewSessionTicketPayloadTls13
impl Codec<'_> for OcspCertificateStatusRequest
impl Codec<'_> for ProtocolName
impl Codec<'_> for PskKeyExchangeModes
impl Codec<'_> for Random
impl Codec<'_> for ResponderId
impl Codec<'_> for ServerDhParams
impl Codec<'_> for ServerEcdhParams
impl Codec<'_> for ServerEncryptedClientHello
impl Codec<'_> for ServerHelloPayload
impl Codec<'_> for SessionId
impl Codec<'_> for SingleProtocolName
impl Codec<'_> for SupportedEcPointFormats
impl Codec<'_> for SupportedProtocolVersions
impl Codec<'_> for ServerSessionValue
impl Codec<'_> for u24
impl<'a> Codec<'a> for Payload<'a>
impl<'a> Codec<'a> for ClientSessionTicket
impl<'a> Codec<'a> for ServerNamePayload<'a>
Simplified encoding/decoding for a ServerName
extension payload to/from DnsName
This is possible because:
- the spec (RFC6066) disallows multiple names for a given name type
- name types other than ServerNameType::HostName are not defined, and they and any data that follows them cannot be skipped over.