View Source Numscriptex.Run (numscriptex v0.2.6)

A Numscript needs some other data aside from the script itself to run correctly, and Numscriptex.Run solves this problem. If you want to know what exactly these additional fields are, you can learn more on Numscript Playground and the Numscript Docs.

Summary

Types

t()

Type that represents Numscriptex.Run struct.

Functions

Lists all available feature flags.

Creates a new Numscriptex.Run{} struct.

Normalizes the Numscriptex.Run struct to a map.

Puts the chosen value under the field key on the Numscriptex.Run struct as long both are valid.

Same as put/3, but raises an exception if any argument is invalid.

Types

t()

@type t() :: %Numscriptex.Run{
  balances: map(),
  feature_flags: list(),
  metadata: map(),
  variables: map()
}

Type that represents Numscriptex.Run struct.

Fields

  • :balances a map with account's assets balances
  • :metadata metadata variables
  • :variables variables
  • :feature_flags a list of feature flags used to enable experimental features

Functions

list_available_feature_flags()

@spec list_available_feature_flags() :: [atom()]

Lists all available feature flags.

iex> Numscriptex.Run.list_available_feature_flags()
[
  :experimental_overdraft_function,
  :experimental_get_asset_function,
  :experimental_get_amount_function,
  :experimental_oneof,
  :experimental_account_interpolation,
  :experimental_mid_script_function_call,
  :experimental_asset_colors
]

new()

@spec new() :: t()

Creates a new Numscriptex.Run{} struct.

iex>  Numscriptex.Run.new()
%Numscriptex.Run{
  variables: %{},
  balances: %{},
  metadata: %{},
  feature_flags: []
}

normalize_to_map(run_input)

@spec normalize_to_map(t()) :: map()

Normalizes the Numscriptex.Run struct to a map.

iex> struct =
...>   Numscriptex.Run.put!(Numscriptex.Run.new(), :feature_flags, [:experimental_overdraft_function])
...>
...> Numscriptex.Run.normalize_to_map(struct)
%{
  balances: %{},
  metadata: %{},
  variables: %{},
  featureFlags: %{"experimental-overdraft-function" => %{}}
}

put(run_struct, field, value)

@spec put(t(), atom(), map()) :: {:ok, t()} | {:error, atom(), map()}

Puts the chosen value under the field key on the Numscriptex.Run struct as long both are valid.

iex> struct = Numscriptex.Run.new()
...> balances =  %{"foo" => %{"USD/2" => 500, "EUR/2" => 300}}
...>
...> Numscriptex.Run.put(struct, :balances, balances)
{:ok,
  %Numscriptex.Run{
    balances: %{"foo" => %{"USD/2" => 500, "EUR/2" => 300}},
    variables: %{},
    metadata: %{},
    feature_flags: []
  }
}

If the value or the field key are invalid, put/3 will return a 3 element error tuple. Ex:

iex> struct = Numscriptex.Run.new()
...>
...> Numscriptex.Run.put(struct, :invalid_field, %{})
{:error, :invalid_field, %{details: "The field 'invalid_field' does not exists."}}

put!(run_struct, field, value)

@spec put!(t(), atom(), map()) :: t() | no_return()

Same as put/3, but raises an exception if any argument is invalid.

iex> struct = Numscriptex.Run.new()
...> balances =  [%{"foo" => %{"USD/2" => 500, "EUR/2" => 300}}]
...>
...> Numscriptex.Run.put!(struct, :balances, balances)
** (ArgumentError) Argument `value` for field `balances` must be a map.