43 lines
1.5 KiB
Haskell
43 lines
1.5 KiB
Haskell
module Network.Stellar.Asset
|
|
( Asset(..)
|
|
, toXdrAsset
|
|
, toXdrAsset'
|
|
)
|
|
where
|
|
|
|
import Control.Monad ((<=<))
|
|
import qualified Data.Text as T
|
|
import Data.Text.Encoding (encodeUtf8)
|
|
import Network.ONCRPC.XDR
|
|
import Network.Stellar.Keypair
|
|
import qualified Network.Stellar.TransactionXdr as X
|
|
|
|
data Asset = AssetNative
|
|
| AssetAlphaNum4 { assetCode :: T.Text, assetIssuer :: T.Text }
|
|
| AssetAlphaNum12 { assetCode :: T.Text, assetIssuer :: T.Text }
|
|
|
|
toXdrAsset :: Asset -> Maybe X.Asset
|
|
toXdrAsset AssetNative = Just X.Asset'ASSET_TYPE_NATIVE
|
|
toXdrAsset (AssetAlphaNum4 code issuer) =
|
|
X.Asset'ASSET_TYPE_CREDIT_ALPHANUM4
|
|
<$> (X.AlphaNum4 <$> lengthArray (encodeUtf8 code) <*> toXdrAccount issuer)
|
|
toXdrAsset (AssetAlphaNum12 code issuer) =
|
|
X.Asset'ASSET_TYPE_CREDIT_ALPHANUM12
|
|
<$> (X.AlphaNum12 <$> lengthArray (encodeUtf8 code) <*> toXdrAccount issuer)
|
|
|
|
toXdrAsset' :: Asset -> X.Asset
|
|
toXdrAsset' AssetNative = X.Asset'ASSET_TYPE_NATIVE
|
|
toXdrAsset' (AssetAlphaNum4 code issuer) =
|
|
X.Asset'ASSET_TYPE_CREDIT_ALPHANUM4 $
|
|
X.AlphaNum4 (lengthArray' $ encodeUtf8 code) (toXdrAccount' issuer)
|
|
toXdrAsset' (AssetAlphaNum12 code issuer) =
|
|
X.Asset'ASSET_TYPE_CREDIT_ALPHANUM12 $
|
|
X.AlphaNum12 (lengthArray' $ encodeUtf8 code) (toXdrAccount' issuer)
|
|
|
|
toXdrAccount :: T.Text -> Maybe X.AccountID
|
|
toXdrAccount =
|
|
fmap X.PublicKey'PUBLIC_KEY_TYPE_ED25519 . lengthArray <=< decodePublic
|
|
|
|
toXdrAccount' :: T.Text -> X.AccountID
|
|
toXdrAccount' =
|
|
X.PublicKey'PUBLIC_KEY_TYPE_ED25519 . lengthArray' . decodePublic'
|