Packages

Elixir SDK for the Stellar network.

Current section

Files

Jump to
stellar_sdk_fork lib tx_build config_setting_id.ex
Raw

lib/tx_build/config_setting_id.ex

defmodule Stellar.TxBuild.ConfigSettingID do
@moduledoc """
`ConfigSettingID` struct definition.
"""
alias StellarBase.XDR.ConfigSettingID
@behaviour Stellar.TxBuild.XDR
@type identifier_type :: atom()
@type validation :: {:ok, atom()}
@type t :: %__MODULE__{identifier: identifier_type()}
defstruct [:identifier]
@identifiers %{
max_size: :MAX_SIZE_BYTES,
compute: :COMPUTE_V0,
ledger_cost: :LEDGER_COST_V0,
historical_data: :HISTORICAL_DATA_V0,
events: :EVENTS_V0,
bandwidth: :BANDWIDTH_V0,
cost_params_cpu: :COST_PARAMS_CPU_INSTRUCTIONS,
cost_params_memory: :COST_PARAMS_MEMORY_BYTES,
data_key_size: :DATA_KEY_SIZE_BYTES,
data_entry_size: :DATA_ENTRY_SIZE_BYTES
}
@impl true
def new(identifier, opts \\ [])
def new(identifier, _opts) when is_map_key(@identifiers, identifier),
do: %__MODULE__{identifier: identifier}
def new(_args, _opts), do: {:error, :invalid_identifier}
@impl true
def to_xdr(%__MODULE__{identifier: identifier}) do
with {:ok, identifier} <- retrieve_xdr_identifier(identifier) do
ConfigSettingID.new(identifier)
end
end
def to_xdr(_struct), do: {:error, :invalid_struct}
@spec retrieve_xdr_identifier(identifier :: identifier_type()) :: validation()
defp retrieve_xdr_identifier(identifier), do: {:ok, Map.get(@identifiers, identifier)}
end