Skip to content
This repository has been archived by the owner on Aug 15, 2021. It is now read-only.
This repository has been archived by the owner on Aug 15, 2021. It is now read-only.

Packed encoding of enum still includes variant names for non-unit variants #187

Open
@joshtriplett

Description

Test case:

use serde::{Deserialize, Serialize};
use std::io::Write;

#[derive(Debug, Deserialize, Serialize)]
enum Thing {
    Thing1(String),
    Thing2(u64),
    Thing3(Box<[Thing]>),
    Thing4,
}

fn main() -> anyhow::Result<()> {
    let thing = Thing::Thing3(vec![Thing::Thing2(42), Thing::Thing4].into_boxed_slice());
    let v = serde_cbor::ser::to_vec_packed(&thing)?;
    std::fs::File::create("cbor")?.write_all(&v)?;
    Ok(())
}

Hex dump of the resulting file:

00000000  a1 66 54 68 69 6e 67 33  82 a1 66 54 68 69 6e 67  |.fThing3..fThing|
00000010  32 18 2a 03                                       |2.*.|

Notice that it includes Thing3 and Thing2, but not Thing4.

From what I can tell, the serialization of unit variants pays attention to self.packed, but the serialization of non-unit variants does not.

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions