Macro generate_versioned_sealable

Source
macro_rules! generate_versioned_sealable {
    (
        // Provide the name
        $enum_name:ident,
        // Provide the namespace
        $namespace:path,
        // Provide mappings from the variant to version. This must not be changed later.
        [ $( $variant_ty:ident => $rename:literal ),+ $(,)? ]
    ) => { ... };
}
Expand description

Generates a versioned enum that implements SealableData.

This serializes to an adjacently tagged enum, with the “version” field being set to the provided version, and the “content” field being the serialized struct.

use bitwarden_crypto::{safe::{DataEnvelopeNamespace, SealableData, SealableVersionedData}, generate_versioned_sealable};
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, PartialEq, Debug)]
struct MyItemV1 {
    a: u32,
    b: String,
}
impl SealableData for MyItemV1 {}

#[derive(Serialize, Deserialize, PartialEq, Debug)]
struct MyItemV2 {
    a: u32,
    b: bool,
    c: bool,
}
impl SealableData for MyItemV2 {}

generate_versioned_sealable!(
    MyItem,
    DataEnvelopeNamespace::VaultItem,
    [
        MyItemV1 => "1",
        MyItemV2 => "2",
    ]
);