serde_amqp 0.14.1

A serde implementation of AMQP1.0 protocol.
Documentation
use serde::{Deserialize, Serialize};

#[cfg(feature = "derive")]
use serde_amqp::{DeserializeComposite, SerializeComposite};

#[cfg(feature = "derive")]
#[derive(Debug, Clone, PartialEq, Eq, SerializeComposite, DeserializeComposite)]
#[amqp_contract(
    name = "test:example:*",
    code = "0x0000_462c:0x0000_0011",
    encoding = "basic"
)]
struct Single<T>(T);

#[derive(Debug, Serialize, Deserialize)]
struct CustomStruct {
    a: u8,
    b: u16,
}

#[cfg(feature = "derive")]
#[test]
fn single_bool() {
    let value = Single(true);
    let encoded = serde_amqp::to_vec(&value).unwrap();
    let expected = [
        0x00, 0x80, 0x00, 0x00, 0x46, 0x2c, 0x00, 0x00, 0x00, 0x11, 0x41,
    ];
    assert_eq!(encoded, expected);
    let decoded = serde_amqp::from_slice::<Single<bool>>(&encoded).unwrap();
    assert_eq!(value, decoded);
}

#[cfg(feature = "derive")]
#[test]
fn single_u8() {
    let value = Single(42u8);
    let encoded = serde_amqp::to_vec(&value).unwrap();
    let expected = [
        0x00, 0x80, 0x00, 0x00, 0x46, 0x2c, 0x00, 0x00, 0x00, 0x11, 0x50, 0x2a,
    ];
    assert_eq!(encoded, expected);
    let decoded = serde_amqp::from_slice::<Single<u8>>(&encoded).unwrap();
    assert_eq!(value, decoded);
}

#[cfg(feature = "derive")]
#[test]
fn single_u16() {
    let value = Single(42u16);
    let encoded = serde_amqp::to_vec(&value).unwrap();
    let expected = [
        0x00, 0x80, 0x00, 0x00, 0x46, 0x2c, 0x00, 0x00, 0x00, 0x11, 0x60, 0x00, 0x2a,
    ];
    assert_eq!(encoded, expected);
    let decoded = serde_amqp::from_slice::<Single<u16>>(&encoded).unwrap();
    assert_eq!(value, decoded);
}

#[cfg(feature = "derive")]
#[test]
fn single_u32() {
    let value = Single(42u32);
    let encoded = serde_amqp::to_vec(&value).unwrap();
    let expected = [
        0x00, 0x80, 0x00, 0x00, 0x46, 0x2c, 0x00, 0x00, 0x00, 0x11, 0x52, 0x2a,
    ];
    assert_eq!(encoded, expected);
    let decoded = serde_amqp::from_slice::<Single<u32>>(&encoded).unwrap();
    assert_eq!(value, decoded);
}

#[cfg(feature = "derive")]
#[test]
fn single_u64() {
    let value = Single(300u64);
    let encoded = serde_amqp::to_vec(&value).unwrap();
    let expected = [
        0x00, 0x80, 0x00, 0x00, 0x46, 0x2c, 0x00, 0x00, 0x00, 0x11, 0x80, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x01, 0x2c,
    ];
    assert_eq!(encoded, expected);
    let decoded = serde_amqp::from_slice::<Single<u64>>(&encoded).unwrap();
    assert_eq!(value, decoded);
}

#[cfg(feature = "derive")]
#[test]
fn single_i8() {
    let value = Single(42i8);
    let encoded = serde_amqp::to_vec(&value).unwrap();
    let expected = [
        0x00, 0x80, 0x00, 0x00, 0x46, 0x2c, 0x00, 0x00, 0x00, 0x11, 0x51, 0x2a,
    ];
    assert_eq!(encoded, expected);
    let decoded = serde_amqp::from_slice::<Single<i8>>(&encoded).unwrap();
    assert_eq!(value, decoded);
}

#[cfg(feature = "derive")]
#[test]
fn single_i16() {
    let value = Single(42i16);
    let encoded = serde_amqp::to_vec(&value).unwrap();
    let expected = [
        0x00, 0x80, 0x00, 0x00, 0x46, 0x2c, 0x00, 0x00, 0x00, 0x11, 0x61, 0x00, 0x2a,
    ];
    assert_eq!(encoded, expected);
    let decoded = serde_amqp::from_slice::<Single<i16>>(&encoded).unwrap();
    assert_eq!(value, decoded);
}

#[cfg(feature = "derive")]
#[test]
fn single_i32() {
    let value = Single(42i32);
    let encoded = serde_amqp::to_vec(&value).unwrap();
    let expected = [
        0x00, 0x80, 0x00, 0x00, 0x46, 0x2c, 0x00, 0x00, 0x00, 0x11, 0x54, 0x2a,
    ];
    assert_eq!(encoded, expected);
    let decoded = serde_amqp::from_slice::<Single<i32>>(&encoded).unwrap();
    assert_eq!(value, decoded);
}

#[cfg(feature = "derive")]
#[test]
fn single_i64() {
    let value = Single(15i64);
    let encoded = serde_amqp::to_vec(&value).unwrap();
    let expected = [
        0x00, 0x80, 0x00, 0x00, 0x46, 0x2c, 0x00, 0x00, 0x00, 0x11, 0x55, 0x0f,
    ];
    assert_eq!(encoded, expected);
    let decoded = serde_amqp::from_slice::<Single<i64>>(&encoded).unwrap();
    assert_eq!(value, decoded);
}

#[cfg(feature = "derive")]
#[test]
fn single_str8() {
    let value = Single("hello");
    let encoded = serde_amqp::to_vec(&value).unwrap();
    let expected = [
        0x00, 0x80, 0x00, 0x00, 0x46, 0x2c, 0x00, 0x00, 0x00, 0x11, 0xa1, 0x05, 0x68, 0x65, 0x6c,
        0x6c, 0x6f,
    ];
    assert_eq!(encoded, expected);
    let decoded = serde_amqp::from_slice::<Single<&str>>(&encoded).unwrap();
    assert_eq!(value, decoded);
}

#[cfg(feature = "derive")]
#[test]
fn single_list8() {
    let value = Single(vec![1u8, 2, 3]);
    let encoded = serde_amqp::to_vec(&value).unwrap();
    let expected = [
        0x00, 0x80, 0x00, 0x00, 0x46, 0x2c, 0x00, 0x00, 0x00, 0x11, 0xc0, 0x07, 0x03, 0x50, 0x01,
        0x50, 0x02, 0x50, 0x03,
    ];
    assert_eq!(encoded, expected);
    let decoded = serde_amqp::from_slice::<Single<Vec<u8>>>(&encoded).unwrap();
    assert_eq!(value, decoded);
}

#[cfg(feature = "derive")]
#[test]
fn single_map8() {
    use serde_amqp::primitives::OrderedMap;

    let mut map = OrderedMap::new();
    map.insert("a", 1u8);
    map.insert("b", 2u8);
    map.insert("c", 3u8);
    let value = Single(map);
    let encoded = serde_amqp::to_vec(&value).unwrap();
    let expected = [
        0x00, 0x80, 0x00, 0x00, 0x46, 0x2c, 0x00, 0x00, 0x00, 0x11, 0xc1, 0x10, 0x06, 0xa1, 0x01,
        0x61, 0x50, 0x01, 0xa1, 0x01, 0x62, 0x50, 0x02, 0xa1, 0x01, 0x63, 0x50, 0x03,
    ];
    assert_eq!(encoded, expected);
    let decoded = serde_amqp::from_slice::<Single<OrderedMap<&str, u8>>>(&encoded).unwrap();
    assert_eq!(value, decoded);
}

#[cfg(feature = "derive")]
#[test]
fn single_array8() {
    use serde_amqp::primitives::Array;

    let array = Array::from(vec![1i32, 2, 3]);
    let value = Single(array);
    let encoded = serde_amqp::to_vec(&value).unwrap();
    let expected = [
        0x00, 0x80, 0x00, 0x00, 0x46, 0x2c, 0x00, 0x00, 0x00, 0x11, 0xe0, 0x0e, 0x03, 0x71, 0x00,
        0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03,
    ];
    assert_eq!(encoded, expected);
    let decoded = serde_amqp::from_slice::<Single<Array<i32>>>(&encoded).unwrap();
    assert_eq!(value, decoded);
}