Skip to main content

encode_cbor_value

Function encode_cbor_value 

Source
pub open spec fn encode_cbor_value(
    value: CborValueSpec,
) -> (CborHead, Sum<(), Sum<(), Sum<Seq<u8>, Sum<(Seq<Seq<u8>>, u8), Sum<Seq<char>, Sum<(Seq<Seq<char>>, u8), Sum<Seq<CborValueSpec>, Sum<(Seq<CborValueSpec>, u8), Sum<Seq<(CborValueSpec, CborValueSpec)>, Sum<(Seq<(CborValueSpec, CborValueSpec)>, u8), Sum<CborValueSpec, Sum<(), Never>>>>>>>>>>>>)
Expand description
{
    #[verusfmt::skip]
    match value {
        CborValueSpec::Integer(value) if value >= 0 => {
            (
                CborHead {
                    major: MajorType::Unsigned,
                    value: CborHeadValue::Argument(value as u64),
                },
                L(()),
            )
        }
        CborValueSpec::Integer(value) => {
            (
                CborHead {
                    major: MajorType::Negative,
                    value: CborHeadValue::Argument((-1 - value as int) as u64),
                },
                R(L(())),
            )
        }
        CborValueSpec::Bytes(bytes) => {
            (
                CborHead {
                    major: MajorType::Bytes,
                    value: CborHeadValue::Argument(bytes.len() as u64),
                },
                R(R(L(bytes))),
            )
        }
        CborValueSpec::Text(text) => {
            (
                CborHead {
                    major: MajorType::Text,
                    value: CborHeadValue::Argument(
                        vstd::utf8::encode_utf8(text).len() as u64,
                    ),
                },
                R(R(R(R(L(text))))),
            )
        }
        CborValueSpec::Array(values) => {
            (
                CborHead {
                    major: MajorType::Array,
                    value: CborHeadValue::Argument(values.len() as u64),
                },
                R(R(R(R(R(R(L(values))))))),
            )
        }
        CborValueSpec::Map(entries) => {
            (
                CborHead {
                    major: MajorType::Map,
                    value: CborHeadValue::Argument(entries.len() as u64),
                },
                R(R(R(R(R(R(R(R(L(entries))))))))),
            )
        }
        CborValueSpec::Tag(tag, value) => {
            (
                CborHead {
                    major: MajorType::Tag,
                    value: CborHeadValue::Argument(tag),
                },
                R(R(R(R(R(R(R(R(R(R(L(*value))))))))))),
            )
        }
        CborValueSpec::Float(value) => {
            (
                CborHead {
                    major: MajorType::Simple,
                    value: CborHeadValue::Float(value),
                },
                R(R(R(R(R(R(R(R(R(R(R(L(())))))))))))),
            )
        }
        CborValueSpec::Bool(value) => {
            (
                CborHead {
                    major: MajorType::Simple,
                    value: CborHeadValue::Simple(if value { 21 } else { 20 }),
                },
                R(R(R(R(R(R(R(R(R(R(R(L(())))))))))))),
            )
        }
        CborValueSpec::Null => {
            (
                CborHead {
                    major: MajorType::Simple,
                    value: CborHeadValue::Simple(22),
                },
                R(R(R(R(R(R(R(R(R(R(R(L(())))))))))))),
            )
        }
        CborValueSpec::Undefined => {
            (
                CborHead {
                    major: MajorType::Simple,
                    value: CborHeadValue::Simple(23),
                },
                R(R(R(R(R(R(R(R(R(R(R(L(())))))))))))),
            )
        }
        CborValueSpec::Simple(value) => {
            (
                CborHead {
                    major: MajorType::Simple,
                    value: CborHeadValue::Simple(value),
                },
                R(R(R(R(R(R(R(R(R(R(R(L(())))))))))))),
            )
        }
    }
}