lib/horizon/operation/set_options.ex

defmodule Stellar.Horizon.Operation.SetOptions do
  @moduledoc """
  Represents a `SetOptions` operation from Horizon API.
  """

  @behaviour Stellar.Horizon.Resource

  alias Stellar.Horizon.Mapping

  @type weight :: 0..255

  @type t :: %__MODULE__{
          signer_key: String.t(),
          signer_weight: weight(),
          master_key_weight: weight(),
          low_threshold: weight(),
          med_threshold: weight(),
          high_threshold: weight(),
          home_domain: String.t(),
          set_flags: list(),
          set_flags_s: list(),
          clear_flags: list(),
          clear_flags_s: list()
        }

  defstruct [
    :signer_key,
    :signer_weight,
    :master_key_weight,
    :low_threshold,
    :med_threshold,
    :high_threshold,
    :home_domain,
    :set_flags,
    :set_flags_s,
    :clear_flags,
    :clear_flags_s
  ]

  @mapping [
    signer_weight: :integer,
    master_key_weight: :integer,
    low_threshold: :integer,
    med_threshold: :integer,
    high_threshold: :integer
  ]

  @impl true
  def new(attrs, opts \\ [])

  def new(attrs, _opts) do
    %__MODULE__{}
    |> Mapping.build(attrs)
    |> Mapping.parse(@mapping)
  end
end