miden_protocol/asset/vault/
asset_class.rs1use core::fmt::Display;
2
3use crate::Felt;
4use crate::utils::serde::{
5 ByteReader,
6 ByteWriter,
7 Deserializable,
8 DeserializationError,
9 Serializable,
10};
11
12#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
15pub struct AssetClass {
16 suffix: Felt,
17 prefix: Felt,
18}
19
20impl AssetClass {
21 pub const SERIALIZED_SIZE: usize = 2 * core::mem::size_of::<u64>();
23
24 pub fn new(suffix: Felt, prefix: Felt) -> Self {
26 Self { suffix, prefix }
27 }
28
29 pub fn suffix(&self) -> Felt {
31 self.suffix
32 }
33
34 pub fn prefix(&self) -> Felt {
36 self.prefix
37 }
38
39 pub fn is_empty(&self) -> bool {
41 self.prefix == Felt::ZERO && self.suffix == Felt::ZERO
42 }
43}
44
45impl Display for AssetClass {
46 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
47 write!(
48 f,
49 "0x{:016x}{:016x}",
50 self.prefix().as_canonical_u64(),
51 self.suffix().as_canonical_u64()
52 )
53 }
54}
55
56impl Serializable for AssetClass {
60 fn write_into<W: ByteWriter>(&self, target: &mut W) {
61 target.write(self.suffix);
62 target.write(self.prefix);
63 }
64
65 fn get_size_hint(&self) -> usize {
66 Self::SERIALIZED_SIZE
67 }
68}
69
70impl Deserializable for AssetClass {
71 fn read_from<R: ByteReader>(source: &mut R) -> Result<Self, DeserializationError> {
72 let suffix: Felt = source.read()?;
73 let prefix: Felt = source.read()?;
74
75 Ok(AssetClass::new(suffix, prefix))
76 }
77}