serde-csv-core 0.3.2

CSV serialization for no_std crates
Documentation
#[test]
fn serialize_unit() {
    let data = ();

    let mut writer = serde_csv_core::Writer::new();
    let mut buf = [0; 32];
    let nwritten = writer.serialize(&data, &mut buf).unwrap();
    let record = std::str::from_utf8(&buf[..nwritten]).unwrap();

    assert_eq!(record, "\"\"\n");
}

#[test]
fn serialize_pair_units() {
    let data = ((), ());

    let mut writer = serde_csv_core::Writer::new();
    let mut buf = [0; 32];
    let nwritten = writer.serialize(&data, &mut buf).unwrap();
    let record = std::str::from_utf8(&buf[..nwritten]).unwrap();

    assert_eq!(record, ",\n");
}

#[test]
fn serialize_none() {
    let data: Option<()> = None;

    let mut writer = serde_csv_core::Writer::new();
    let mut buf = [0; 32];
    let nwritten = writer.serialize(&data, &mut buf).unwrap();
    let record = std::str::from_utf8(&buf[..nwritten]).unwrap();

    assert_eq!(record, "\"\"\n");
}

#[test]
fn serialize_some() {
    let data: Option<()> = None;

    let mut writer = serde_csv_core::Writer::new();
    let mut buf = [0; 32];
    let nwritten = writer.serialize(&data, &mut buf).unwrap();
    let record = std::str::from_utf8(&buf[..nwritten]).unwrap();

    assert_eq!(record, "\"\"\n");
}

#[test]
fn serialize_empty_slice() {
    let data: &[i32] = &[];

    let mut writer = serde_csv_core::Writer::new();
    let mut buf = [0; 32];
    let nwritten = writer.serialize(&data, &mut buf).unwrap();
    let record = std::str::from_utf8(&buf[..nwritten]).unwrap();

    assert_eq!(record, "\"\"\n");
}

#[test]
fn serialize_slice() {
    let data: &[i32] = &[0, 1, 2, 3];

    let mut writer = serde_csv_core::Writer::new();
    let mut buf = [0; 32];
    let nwritten = writer.serialize(&data, &mut buf).unwrap();
    let record = std::str::from_utf8(&buf[..nwritten]).unwrap();

    assert_eq!(record, "0,1,2,3\n");
}

#[test]
fn serialize_string_with_comma() {
    let data = "a,b,c";

    let mut writer = serde_csv_core::Writer::new();
    let mut buf = [0; 32];
    let nwritten = writer.serialize(&data, &mut buf).unwrap();
    let record = std::str::from_utf8(&buf[..nwritten]).unwrap();

    assert_eq!(record, "\"a,b,c\"\n");
}

#[test]
fn serialize_compound() {
    #[derive(serde::Serialize)]
    struct Struct {
        x: i32,
        y: i32,
    }

    #[derive(serde::Serialize)]
    struct Data {
        t: (i32, i32),
        a: [i32; 4],
        s: Struct,
    }

    let data = Data {
        t: (0, 1),
        a: [2, 3, 4, 5],
        s: Struct { x: 6, y: 7 },
    };

    let mut writer = serde_csv_core::Writer::new();
    let mut buf = [0; 32];
    let nwritten = writer.serialize(&data, &mut buf).unwrap();
    let record = std::str::from_utf8(&buf[..nwritten]).unwrap();

    assert_eq!(record, "0,1,2,3,4,5,6,7\n");
}

#[test]
fn serialize_enum() {
    #[derive(serde::Serialize)]
    enum Data {
        A,
        B,
    }

    let data_a = Data::A;
    let data_b = Data::B;

    let mut writer = serde_csv_core::Writer::new();
    let mut buf = [0; 32];

    let nwritten = writer.serialize(&data_a, &mut buf).unwrap();
    let record = std::str::from_utf8(&buf[..nwritten]).unwrap();
    assert_eq!(record, "A\n");

    let nwritten = writer.serialize(&data_b, &mut buf).unwrap();
    let record = std::str::from_utf8(&buf[..nwritten]).unwrap();
    assert_eq!(record, "B\n");
}

#[test]
#[should_panic(
    expected = "not implemented: `Serializer::serialize_newtype_variant` is not supported"
)]
fn serialize_stateful_enum() {
    #[derive(serde::Serialize)]
    struct A {
        x: i32,
        y: i32,
    }

    #[derive(serde::Serialize)]
    struct B {
        x: i32,
    }

    #[derive(serde::Serialize)]
    enum Data {
        A(A),
        B(B),
    }

    let data_a = Data::A(A { x: 0, y: 1 });
    let data_b = Data::B(B { x: 0 });

    let mut writer = serde_csv_core::Writer::new();
    let mut buf = [0; 32];

    let nwritten = writer.serialize(&data_a, &mut buf).unwrap();
    let record = std::str::from_utf8(&buf[..nwritten]).unwrap();
    assert_eq!(record, "0,1\n");

    let nwritten = writer.serialize(&data_b, &mut buf).unwrap();
    let record = std::str::from_utf8(&buf[..nwritten]).unwrap();
    assert_eq!(record, "0\n");
}