defmodule Stellar.TxBuild.FromAsset do @moduledoc """ `FromAsset` struct definition. """ import Stellar.TxBuild.Validations, only: [validate_string: 1, validate_asset: 1] alias StellarBase.XDR.{FromAsset, Hash} alias Stellar.TxBuild.Asset @type t :: %__MODULE__{ network_id: binary(), asset: Asset.t() } @behaviour Stellar.TxBuild.XDR defstruct [:network_id, :asset] @impl true def new(args, opts \\ nil) def new(args, _opts) when is_list(args) do network_id = Keyword.get(args, :network_id) asset = Keyword.get(args, :asset) with {:ok, network_id} <- validate_string({:network_id, network_id}), {:ok, asset} <- validate_asset({:asset, asset}) do %__MODULE__{ network_id: network_id, asset: asset } end end def new(_args, _opts), do: {:error, :invalid_from_asset} @impl true def to_xdr(%__MODULE__{ network_id: network_id, asset: asset }) do network_id = Hash.new(network_id) asset = Asset.to_xdr(asset) FromAsset.new(network_id, asset) end def to_xdr(_error), do: {:error, :invalid_struct_from_asset} end