defmodule Stellar.TxBuild.OptionalClaimPredicate do
@moduledoc """
`OptionalClaimPredicate` struct definition.
"""
alias StellarBase.XDR.OptionalClaimPredicate
alias Stellar.TxBuild.ClaimPredicate
@behaviour Stellar.TxBuild.XDR
@type predicate :: ClaimPredicate.t() | nil
defstruct [:value]
@impl true
def new(predicate \\ nil, opts \\ [])
def new(nil, _opts), do: %__MODULE__{value: nil}
def new(%ClaimPredicate{} = predicate, _opts) do
%__MODULE__{value: predicate}
end
def new(_args, _opts), do: {:error, :invalid_optional_claim_predicate}
@impl true
def to_xdr(%__MODULE__{value: nil}), do: OptionalClaimPredicate.new()
def to_xdr(%__MODULE__{value: predicate}) do
predicate
|> ClaimPredicate.to_xdr()
|> OptionalClaimPredicate.new()
end
end