fromXdr method Null safety

Asset fromXdr(
  1. XdrAsset xdrAsset
)

Generates an Asset object from a given XDR object xdrAsset.

Implementation

static Asset fromXdr(XdrAsset xdrAsset) {
  switch (xdrAsset.discriminant) {
    case XdrAssetType.ASSET_TYPE_NATIVE:
      return new AssetTypeNative();
    case XdrAssetType.ASSET_TYPE_CREDIT_ALPHANUM4:
      String assetCode4 =
          Util.paddedByteArrayToString(xdrAsset.alphaNum4!.assetCode);
      KeyPair issuer4 =
          KeyPair.fromXdrPublicKey(xdrAsset.alphaNum4!.issuer.accountID);
      return AssetTypeCreditAlphaNum4(assetCode4, issuer4.accountId);
    case XdrAssetType.ASSET_TYPE_CREDIT_ALPHANUM12:
      String assetCode12 =
          Util.paddedByteArrayToString(xdrAsset.alphaNum12!.assetCode);
      KeyPair issuer12 =
          KeyPair.fromXdrPublicKey(xdrAsset.alphaNum12!.issuer.accountID);
      return AssetTypeCreditAlphaNum12(assetCode12, issuer12.accountId);
    case XdrAssetType.ASSET_TYPE_POOL_SHARE:
      if (xdrAsset is XdrChangeTrustAsset) {
        XdrAsset a = xdrAsset.liquidityPool!.constantProduct!.assetA;
        XdrAsset b = xdrAsset.liquidityPool!.constantProduct!.assetB;
        return AssetTypePoolShare(
            assetA: Asset.fromXdr(a), assetB: Asset.fromXdr(b));
      } else {
        throw Exception("Unknown pool share asset type");
      }
    default:
      throw Exception(
          "Unknown asset type ${xdrAsset.discriminant.toString()}");
  }
}