substrate_stellar_sdk/xdr/impls/
asset.rs

1use core::convert::AsRef;
2
3use crate::{
4    types::{AlphaNum12, AlphaNum4},
5    Asset, AssetCode, IntoAccountId, StellarSdkError,
6};
7
8impl Asset {
9    pub fn native() -> Self {
10        Asset::AssetTypeNative
11    }
12
13    pub fn from_asset_code<T: AsRef<[u8]>, S: IntoAccountId>(
14        asset_code: T,
15        issuer: S,
16    ) -> Result<Self, StellarSdkError> {
17        let asset_code = AssetCode::new(asset_code)?;
18
19        match asset_code {
20            AssetCode::AssetTypeCreditAlphanum4(asset_code) =>
21                Ok(Self::AssetTypeCreditAlphanum4(AlphaNum4 { asset_code, issuer: issuer.into_account_id()? })),
22            AssetCode::AssetTypeCreditAlphanum12(asset_code) =>
23                Ok(Self::AssetTypeCreditAlphanum12(AlphaNum12 { asset_code, issuer: issuer.into_account_id()? })),
24            AssetCode::Default(_) => unreachable!(),
25        }
26    }
27}