wolfcose 0.1.0

Safe Rust API for wolfSSL wolfCOSE.
#![allow(missing_docs)]

use wolfcose::{CborDecoder, CborEncoder, CborMajorType, Error};

#[test]
fn cbor_round_trip_core_items() {
    let mut out = [0u8; 64];
    let len = {
        let mut enc = CborEncoder::new(&mut out);
        enc.encode_array_start(4).unwrap();
        enc.encode_u64(42).unwrap();
        enc.encode_i64(-7).unwrap();
        enc.encode_bstr(b"wolf").unwrap();
        enc.encode_tstr("COSE").unwrap();
        enc.len()
    };

    let mut dec = CborDecoder::new(&out[..len]);
    assert_eq!(dec.peek_type(), Some(CborMajorType::ARRAY));
    assert_eq!(dec.decode_array_start().unwrap(), 4);
    assert_eq!(dec.decode_u64().unwrap(), 42);
    assert_eq!(dec.decode_i64().unwrap(), -7);
    assert_eq!(dec.decode_bstr().unwrap(), b"wolf");
    assert_eq!(dec.decode_tstr_bytes().unwrap(), b"COSE");
}

#[test]
fn cbor_skip_nested_item() {
    let mut out = [0u8; 64];
    let len = {
        let mut enc = CborEncoder::new(&mut out);
        enc.encode_array_start(3).unwrap();
        enc.encode_u64(1).unwrap();
        enc.encode_array_start(2).unwrap();
        enc.encode_u64(2).unwrap();
        enc.encode_u64(3).unwrap();
        enc.encode_u64(4).unwrap();
        enc.len()
    };

    let mut dec = CborDecoder::new(&out[..len]);
    assert_eq!(dec.decode_array_start().unwrap(), 3);
    assert_eq!(dec.decode_u64().unwrap(), 1);
    dec.skip().unwrap();
    assert_eq!(dec.decode_u64().unwrap(), 4);
}

#[test]
fn cbor_reports_small_output_buffer() {
    let mut out = [0u8; 1];
    let mut enc = CborEncoder::new(&mut out);
    assert_eq!(enc.encode_u64(1000), Err(Error::BufferTooSmall));
}

#[test]
fn cbor_float_helpers_are_available() {
    let mut out = [0u8; 16];
    let mut enc = CborEncoder::new(&mut out);
    if cfg!(feature = "float") {
        enc.encode_f32(1.0).unwrap();
        enc.encode_f64(1.0).unwrap();
    } else {
        assert_eq!(enc.encode_f32(1.0), Err(Error::Unsupported));
        assert_eq!(enc.encode_f64(1.0), Err(Error::Unsupported));
    }
}