Skip to main content

HexCodec

Struct HexCodec 

Source
pub struct HexCodec { /* private fields */ }
Expand description

Encodes and decodes hexadecimal byte strings.

HexCodec is an owned facade for whole byte slices. Whole-string prefix, per-byte prefix, separator, and whitespace handling are part of encode and decode. Use crate::HexByteCodec when a low-level qubit_codec::Codec<Value = u8, Unit = u8> is required.

§Examples

use qubit_codec_misc::HexCodec;

let codec = HexCodec::new();
let encoded = codec.encode(&[0x1f, 0x8b]);
assert_eq!(encoded, "1f8b");
assert_eq!(codec.decode(&encoded).unwrap(), [0x1f, 0x8b]);

Implementations§

Source§

impl HexCodec

Source

pub fn new() -> Self

Creates a lowercase codec without prefix or separators.

§Returns

A hexadecimal codec using lowercase digits.

Source

pub fn upper() -> Self

Creates an uppercase codec without prefix or separators.

§Returns

A hexadecimal codec using uppercase digits.

Source

pub fn from_config(config: HexCodecConfig) -> Self

Creates a codec from an explicit configuration.

Source

pub fn config(&self) -> &HexCodecConfig

Returns the configuration used by this codec.

Source

pub fn with_uppercase(self, uppercase: bool) -> Self

Sets whether encoded digits should be uppercase.

§Parameters
  • uppercase: Whether to use uppercase hexadecimal digits.
§Returns

The updated codec.

Source

pub fn with_prefix(self, prefix: impl Into<String>) -> Self

Sets a whole-output prefix.

The prefix is written once before the encoded bytes and required once before decoded input. For example, using prefix 0x encodes bytes as 0x1f8b.

§Parameters
  • prefix: Whole-output prefix text such as 0x.
§Returns

The updated codec.

Source

pub fn with_byte_prefix(self, prefix: impl Into<String>) -> Self

Sets a per-byte prefix.

The prefix is written before every encoded byte and required before every decoded byte. For example, using byte prefix 0x and separator encodes bytes as 0x1f 0x8b. When ASCII whitespace is ignored, a complete per-byte prefix is matched before additional whitespace is skipped.

§Parameters
  • prefix: Per-byte prefix text such as 0x.
§Returns

The updated codec.

Source

pub fn with_separator(self, separator: impl Into<String>) -> Self

Sets a separator written and accepted between encoded bytes.

With a non-empty separator, the two hexadecimal digits of each byte must be contiguous. Ignored ASCII whitespace may surround complete byte tokens and configured separators, but does not replace a required prefix or separator. Without a non-empty separator, ignored whitespace may also occur between the two digits of a byte. A complete structural token is matched before skipping additional whitespace. Non-whitespace separators are matched exactly; a whitespace-only separator still requires whitespace between bytes, and ignored ASCII whitespace may consume additional adjacent whitespace. Prefix case folding does not apply to separators.

§Parameters
  • separator: Separator text.
§Returns

The updated codec.

Source

pub fn with_ignored_ascii_whitespace(self, ignore: bool) -> Self

Sets whether ASCII whitespace is ignored while decoding.

With a non-empty separator, the two hexadecimal digits of each byte must be contiguous. Ignored ASCII whitespace may surround complete byte tokens and configured separators, but does not replace a required prefix or separator. Without a non-empty separator, ignored whitespace may also occur between the two digits of a byte. A complete structural token is matched before skipping additional whitespace. Non-whitespace separators are matched exactly; a whitespace-only separator still requires whitespace between bytes, and ignored ASCII whitespace may consume additional adjacent whitespace. Prefix case folding does not apply to separators.

§Parameters
  • ignore: Whether to ignore ASCII whitespace.
§Returns

The updated codec.

Source

pub fn with_ignore_prefix_case(self, ignore: bool) -> Self

Sets whether ASCII case is ignored when decoding configured prefixes.

This option affects whole-output prefixes and per-byte prefixes during decoding only. Encoding writes prefixes exactly as configured.

§Parameters
  • ignore: Whether to ignore ASCII case while matching prefixes.
§Returns

The updated codec.

Source

pub fn encode(&self, bytes: &[u8]) -> String

Encodes bytes into a hexadecimal string.

§Parameters
  • bytes: Bytes to encode.
§Returns

Hexadecimal text.

Source

pub fn encode_into(&self, bytes: &[u8], output: &mut String)

Encodes bytes into an existing string.

§Parameters
  • bytes: Bytes to encode.
  • output: Destination string.
Source

pub fn decode(&self, text: &str) -> MiscCodecResult<Vec<u8>>

Decodes hexadecimal text into bytes.

§Parameters
  • text: Hexadecimal text.
§Returns

Decoded bytes.

§Errors

Returns MiscCodecError when a configured whole or per-byte prefix is missing, when the normalized digit count is odd, or when a non-hex digit is found.

Source

pub fn decode_into( &self, text: &str, output: &mut Vec<u8>, ) -> MiscCodecResult<()>

Decodes hexadecimal text into an existing byte vector.

§Parameters
  • text: Hexadecimal text.
  • output: Destination byte vector.
§Errors

Returns MiscCodecError when the input is malformed. On such an error, the vector’s elements and length remain unchanged; its capacity may have changed.

Trait Implementations§

Source§

impl Clone for HexCodec

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for HexCodec

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for HexCodec

Source§

fn default() -> Self

Creates a lowercase codec without prefix or separators.

Source§

impl Eq for HexCodec

Source§

impl PartialEq for HexCodec

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for HexCodec

Source§

impl ValueDecoder<str> for HexCodec

Source§

fn decode(&mut self, input: &str) -> Result<Self::Output, Self::Error>

Decodes hexadecimal text into bytes.

Source§

type Error = MiscCodecError

Error reported when Input cannot be decoded. Read more
Source§

type Output = Vec<u8>

Owned value produced from one successfully decoded Input. Read more
Source§

impl ValueEncoder<[u8]> for HexCodec

Source§

fn encode(&mut self, input: &[u8]) -> Result<Self::Output, Self::Error>

Encodes bytes into hexadecimal text.

Source§

type Error = MiscCodecError

Failure reported when one input value cannot be represented. Read more
Source§

type Output = String

Owned representation produced from one input value. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.