use qubit_codec::ValueEncoder;
use qubit_codec_misc::{
Base64Codec,
HexCodec,
PercentCodec,
};
#[test]
fn test_encoder_trait_dispatches_to_binary_codecs() {
let bytes = [0xfb, 0xef];
let hex = ValueEncoder::<[u8]>::encode(&mut HexCodec::upper(), &bytes)
.expect("hex should encode");
let base64 =
ValueEncoder::<[u8]>::encode(&mut Base64Codec::url_safe(), &bytes)
.expect("base64 should encode");
assert_eq!("FBEF", hex);
assert_eq!("--8=", base64);
}
#[test]
fn test_encoder_trait_dispatches_to_text_codecs() {
let encoded =
ValueEncoder::<str>::encode(&mut PercentCodec::new(), "a b/δΈ")
.expect("percent should encode");
assert_eq!("a%20b%2F%E4%B8%AD", encoded);
}
#[test]
fn test_generic_value_encoder_example_accepts_mutable_codec() {
fn encode_payload<C>(
codec: &mut C,
payload: &[u8],
) -> Result<String, qubit_codec_misc::MiscCodecError>
where
C: ValueEncoder<
[u8],
Output = String,
Error = qubit_codec_misc::MiscCodecError,
>,
{
codec.encode(payload)
}
let mut codec = HexCodec::new();
let encoded = encode_payload(&mut codec, &[0xab, 0xcd])
.expect("generic hex encoding should succeed");
assert_eq!("abcd", encoded);
}