1use std::{fmt::Display, str::FromStr};
2
3use elements::hex::ToHex;
4
5use crate::UniffiCustomTypeConverter;
6
7#[derive(PartialEq, Eq, Debug, Hash, Clone, Copy, PartialOrd, Ord)]
11pub struct AssetId {
12 inner: elements::AssetId,
13}
14
15impl Display for AssetId {
16 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
17 write!(f, "{}", self.inner)
18 }
19}
20
21impl From<elements::AssetId> for AssetId {
22 fn from(inner: elements::AssetId) -> Self {
23 AssetId { inner }
24 }
25}
26
27impl From<AssetId> for elements::AssetId {
28 fn from(value: AssetId) -> Self {
29 value.inner
30 }
31}
32
33uniffi::custom_type!(AssetId, String);
34impl UniffiCustomTypeConverter for AssetId {
35 type Builtin = String;
36
37 fn into_custom(val: Self::Builtin) -> uniffi::Result<Self> {
38 let inner = elements::AssetId::from_str(&val)?;
39 Ok(AssetId { inner })
40 }
41
42 fn from_custom(obj: Self) -> Self::Builtin {
43 obj.inner.to_hex()
44 }
45}
46
47#[cfg(test)]
48mod tests {
49 use super::AssetId;
50 use crate::UniffiCustomTypeConverter;
51
52 #[test]
53 fn asset_id() {
54 let elements_asset_id = elements::AssetId::default();
55 let asset_id: AssetId = elements_asset_id.into();
56 assert_eq!(
57 <AssetId as UniffiCustomTypeConverter>::into_custom(
58 UniffiCustomTypeConverter::from_custom(asset_id)
59 )
60 .unwrap(),
61 asset_id
62 );
63 }
64}