radix_common/data/manifest/
display_context.rs

1use super::model::*;
2use crate::address::AddressBech32Encoder;
3use sbor::rust::prelude::*;
4
5/// Note - this is quite similar to ManifestDecompilationDisplayContext
6/// - except this is used with formatting of an encoded payload, rather than a ManifestValue itself
7#[derive(Clone, Copy, Debug, Default)]
8pub struct ManifestValueDisplayContext<'a> {
9    pub address_bech32_encoder: Option<&'a AddressBech32Encoder>,
10    pub bucket_names: Option<&'a NonIterMap<ManifestBucket, String>>,
11    pub proof_names: Option<&'a NonIterMap<ManifestProof, String>>,
12    pub address_reservation_names: Option<&'a NonIterMap<ManifestAddressReservation, String>>,
13    pub address_names: Option<&'a NonIterMap<ManifestNamedAddress, String>>,
14}
15
16impl<'a> ManifestValueDisplayContext<'a> {
17    pub fn no_context() -> Self {
18        Self::default()
19    }
20
21    pub fn with_optional_bech32(address_bech32_encoder: Option<&'a AddressBech32Encoder>) -> Self {
22        Self {
23            address_bech32_encoder,
24            ..Default::default()
25        }
26    }
27
28    pub fn with_bech32_and_names(
29        address_bech32_encoder: Option<&'a AddressBech32Encoder>,
30        bucket_names: &'a NonIterMap<ManifestBucket, String>,
31        proof_names: &'a NonIterMap<ManifestProof, String>,
32        address_reservation_names: &'a NonIterMap<ManifestAddressReservation, String>,
33        address_names: &'a NonIterMap<ManifestNamedAddress, String>,
34    ) -> Self {
35        Self {
36            address_bech32_encoder,
37            bucket_names: Some(bucket_names),
38            proof_names: Some(proof_names),
39            address_reservation_names: Some(address_reservation_names),
40            address_names: Some(address_names),
41        }
42    }
43
44    pub fn get_bucket_name(&self, bucket_id: &ManifestBucket) -> Option<&str> {
45        self.bucket_names
46            .and_then(|names| names.get(bucket_id).map(|s| s.as_str()))
47    }
48
49    pub fn get_proof_name(&self, proof_id: &ManifestProof) -> Option<&str> {
50        self.proof_names
51            .and_then(|names| names.get(proof_id).map(|s| s.as_str()))
52    }
53
54    pub fn get_address_reservation_name(
55        &self,
56        address_reservation_id: &ManifestAddressReservation,
57    ) -> Option<&str> {
58        self.address_reservation_names
59            .and_then(|names| names.get(address_reservation_id).map(|s| s.as_str()))
60    }
61
62    pub fn get_address_name(&self, address_id: &ManifestNamedAddress) -> Option<&str> {
63        self.address_names
64            .and_then(|names| names.get(address_id).map(|s| s.as_str()))
65    }
66}
67
68impl<'a> From<&'a AddressBech32Encoder> for ManifestValueDisplayContext<'a> {
69    fn from(val: &'a AddressBech32Encoder) -> Self {
70        ManifestValueDisplayContext::with_optional_bech32(Some(val))
71    }
72}
73
74impl<'a> From<Option<&'a AddressBech32Encoder>> for ManifestValueDisplayContext<'a> {
75    fn from(val: Option<&'a AddressBech32Encoder>) -> Self {
76        ManifestValueDisplayContext::with_optional_bech32(val)
77    }
78}