Skip to main content

miden_objects/conversion/
asset.rs

1use miden_protocol::asset::{Asset, AssetClass, AssetComposition, AssetId};
2
3use crate::proto;
4
5#[cfg(test)]
6mod tests;
7
8impl From<&AssetClass> for proto::asset::AssetClass {
9    fn from(asset_class: &AssetClass) -> Self {
10        Self {
11            suffix: Some(asset_class.suffix().into()),
12            prefix: Some(asset_class.prefix().into()),
13        }
14    }
15}
16
17impl From<AssetClass> for proto::asset::AssetClass {
18    fn from(asset_class: AssetClass) -> Self {
19        Self::from(&asset_class)
20    }
21}
22
23impl From<&AssetId> for proto::asset::AssetId {
24    fn from(asset_id: &AssetId) -> Self {
25        use proto::asset::asset_id::Composition;
26
27        let composition = match asset_id.composition() {
28            AssetComposition::None => Composition::NonFungible(asset_id.asset_class().into()),
29            AssetComposition::Fungible => Composition::Fungible(()),
30            AssetComposition::Custom => Composition::Custom(asset_id.asset_class().into()),
31        };
32        Self {
33            version: proto::asset::AssetVersion::V1 as i32,
34            faucet_id: Some(asset_id.faucet_id().into()),
35            composition: Some(composition),
36        }
37    }
38}
39
40impl From<AssetId> for proto::asset::AssetId {
41    fn from(asset_id: AssetId) -> Self {
42        Self::from(&asset_id)
43    }
44}
45
46impl From<&Asset> for proto::asset::Asset {
47    fn from(asset: &Asset) -> Self {
48        Self {
49            asset_id: Some(asset.id().into()),
50            value: Some(asset.to_value_word().into()),
51        }
52    }
53}
54
55impl From<Asset> for proto::asset::Asset {
56    fn from(asset: Asset) -> Self {
57        Self::from(&asset)
58    }
59}