defmodule Runbox.Runtime.Stage.Unit do @moduledoc """ Struct representing a unit. """ alias __MODULE__, as: U @enforce_keys [:id] defstruct id: "", state: %{}, attributes: %{} @type t :: %U{ id: binary(), state: any(), attributes: map() } @spec new(id :: binary(), state :: any(), attributes :: map()) :: t() def new(id, state, attributes) do %U{id: id, state: state, attributes: attributes} end @spec id(t()) :: binary() def id(%U{id: id}), do: id @spec state(t()) :: any() def state(%U{state: state}), do: state @spec set_state(t(), state :: any()) :: t() def set_state(%U{} = u, state), do: %U{u | state: state} @spec attributes(t()) :: map() def attributes(%U{attributes: attributes}), do: attributes end