radix_common/data/manifest/
custom_value_kind.rs

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