lib/tx_build/weight.ex

defmodule Stellar.TxBuild.Weight do
  @moduledoc """
  `Weight` struct definition.
  """
  alias StellarBase.XDR.UInt32

  @behaviour Stellar.TxBuild.XDR

  @type weight :: non_neg_integer()

  @type t :: %__MODULE__{value: weight()}

  defstruct [:value]

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

  def new(weight, _opts) when is_integer(weight) and weight >= 0 and weight <= 255 do
    %__MODULE__{value: weight}
  end

  def new(_value, _opts), do: {:error, :invalid_weight}

  @impl true
  def to_xdr(%__MODULE__{value: weight}) do
    UInt32.new(weight)
  end
end