miden_objects/conversion/
asset.rs1use 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}