tezos_smart_rollup_host/
metadata.rs1#[cfg(feature = "crypto")]
8use tezos_crypto_rs::hash::SmartRollupHash;
9
10pub const RAW_ROLLUP_ADDRESS_SIZE: usize = 20;
12
13pub const METADATA_SIZE: usize = RAW_ROLLUP_ADDRESS_SIZE + core::mem::size_of::<i32>();
15
16#[derive(Clone, Debug, PartialEq, Eq)]
23pub struct RollupMetadata {
24 pub raw_rollup_address: [u8; RAW_ROLLUP_ADDRESS_SIZE],
26 pub origination_level: u32,
28}
29
30impl RollupMetadata {
31 #[cfg(feature = "crypto")]
33 pub fn address(&self) -> SmartRollupHash {
34 SmartRollupHash(self.raw_rollup_address.to_vec())
35 }
36}
37
38impl From<[u8; METADATA_SIZE]> for RollupMetadata {
39 fn from(value: [u8; METADATA_SIZE]) -> Self {
40 let (address, origination_level) = value.split_at(20);
41 let rollup_address: [u8; RAW_ROLLUP_ADDRESS_SIZE] = address.try_into().unwrap();
42 let origination_level: [u8; core::mem::size_of::<i32>()] =
43 origination_level.try_into().unwrap();
44 let origination_level = i32::from_be_bytes(origination_level) as u32;
46 RollupMetadata {
47 raw_rollup_address: rollup_address,
48 origination_level,
49 }
50 }
51}
52
53impl From<RollupMetadata> for [u8; METADATA_SIZE] {
54 fn from(value: RollupMetadata) -> [u8; METADATA_SIZE] {
55 let mut data = [0; METADATA_SIZE];
56 data[..20].copy_from_slice(&value.raw_rollup_address);
57 data[20..METADATA_SIZE]
58 .copy_from_slice(&i32::to_be_bytes(value.origination_level as i32));
59 data
60 }
61}