radix_common/data/manifest/
custom_value_kind.rs

1use crate::internal_prelude::*;
2#[cfg(feature = "fuzzing")]
3use arbitrary::Arbitrary;
4
5pub const MANIFEST_VALUE_KIND_ADDRESS: u8 = 0x80;
6pub const MANIFEST_VALUE_KIND_BUCKET: u8 = 0x81;
7pub const MANIFEST_VALUE_KIND_PROOF: u8 = 0x82;
8pub const MANIFEST_VALUE_KIND_EXPRESSION: u8 = 0x83;
9pub const MANIFEST_VALUE_KIND_BLOB: u8 = 0x84;
10pub const MANIFEST_VALUE_KIND_DECIMAL: u8 = 0x85;
11pub const MANIFEST_VALUE_KIND_PRECISE_DECIMAL: u8 = 0x86;
12pub const MANIFEST_VALUE_KIND_NON_FUNGIBLE_LOCAL_ID: u8 = 0x87;
13pub const MANIFEST_VALUE_KIND_ADDRESS_RESERVATION: u8 = 0x88;
14
15#[cfg_attr(feature = "fuzzing", derive(Arbitrary))]
16#[cfg_attr(
17    feature = "serde",
18    derive(serde::Serialize, serde::Deserialize),
19    serde(tag = "type")
20)]
21#[derive(Copy, Debug, Clone, PartialEq, Eq)]
22pub enum ManifestCustomValueKind {
23    Address,
24    Bucket,
25    Proof,
26    Expression,
27    Blob,
28    Decimal,
29    PreciseDecimal,
30    NonFungibleLocalId,
31    AddressReservation,
32}
33
34impl From<ManifestCustomValueKind> for ValueKind<ManifestCustomValueKind> {
35    fn from(custom_value_kind: ManifestCustomValueKind) -> Self {
36        ValueKind::Custom(custom_value_kind)
37    }
38}
39
40impl CustomValueKind for ManifestCustomValueKind {
41    fn as_u8(&self) -> u8 {
42        match self {
43            Self::Address => MANIFEST_VALUE_KIND_ADDRESS,
44            Self::Bucket => MANIFEST_VALUE_KIND_BUCKET,
45            Self::Proof => MANIFEST_VALUE_KIND_PROOF,
46            Self::Expression => MANIFEST_VALUE_KIND_EXPRESSION,
47            Self::Blob => MANIFEST_VALUE_KIND_BLOB,
48            Self::Decimal => MANIFEST_VALUE_KIND_DECIMAL,
49            Self::PreciseDecimal => MANIFEST_VALUE_KIND_PRECISE_DECIMAL,
50            Self::NonFungibleLocalId => MANIFEST_VALUE_KIND_NON_FUNGIBLE_LOCAL_ID,
51            Self::AddressReservation => MANIFEST_VALUE_KIND_ADDRESS_RESERVATION,
52        }
53    }
54
55    fn from_u8(id: u8) -> Option<Self> {
56        match id {
57            MANIFEST_VALUE_KIND_ADDRESS => Some(ManifestCustomValueKind::Address),
58            MANIFEST_VALUE_KIND_BUCKET => Some(ManifestCustomValueKind::Bucket),
59            MANIFEST_VALUE_KIND_PROOF => Some(ManifestCustomValueKind::Proof),
60            MANIFEST_VALUE_KIND_EXPRESSION => Some(ManifestCustomValueKind::Expression),
61            MANIFEST_VALUE_KIND_BLOB => Some(ManifestCustomValueKind::Blob),
62            MANIFEST_VALUE_KIND_DECIMAL => Some(ManifestCustomValueKind::Decimal),
63            MANIFEST_VALUE_KIND_PRECISE_DECIMAL => Some(ManifestCustomValueKind::PreciseDecimal),
64            MANIFEST_VALUE_KIND_NON_FUNGIBLE_LOCAL_ID => {
65                Some(ManifestCustomValueKind::NonFungibleLocalId)
66            }
67            MANIFEST_VALUE_KIND_ADDRESS_RESERVATION => {
68                Some(ManifestCustomValueKind::AddressReservation)
69            }
70            _ => None,
71        }
72    }
73}