radix_common/data/manifest/
display_context.rs1use super::model::*;
2use crate::address::AddressBech32Encoder;
3use sbor::rust::prelude::*;
4
5#[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}