# `Orchid.Param`
[🔗](https://github.com/SynapticStrings/Orchid/blob/main/lib/orchid/param.ex#L1)

The standard unit of data exchange.

Every step receives and returns Param structs (or lists/tuples of them).
It carries the payload and metadata.

The purpose of this module is to abstract parameter handling and define a consistent
interface for data exchange. This standardization allows developers using `Orchid`
to focus on their business logic rather than the details of data flow management.

# `name`
[🔗](https://github.com/SynapticStrings/Orchid/blob/main/lib/orchid/param.ex#L28)

```elixir
@type name() :: term()
```

# `param_type`
[🔗](https://github.com/SynapticStrings/Orchid/blob/main/lib/orchid/param.ex#L29)

```elixir
@type param_type() :: atom() | module()
```

# `payload`
[🔗](https://github.com/SynapticStrings/Orchid/blob/main/lib/orchid/param.ex#L34)

```elixir
@type payload() :: raw_payload() | ref_payload()
```

# `raw_payload`
[🔗](https://github.com/SynapticStrings/Orchid/blob/main/lib/orchid/param.ex#L33)

```elixir
@type raw_payload() :: any() | nil
```

# `ref_payload`
[🔗](https://github.com/SynapticStrings/Orchid/blob/main/lib/orchid/param.ex#L32)

```elixir
@type ref_payload() :: {:ref, {module(), ref :: term()}, term()}
```

# `t`
[🔗](https://github.com/SynapticStrings/Orchid/blob/main/lib/orchid/param.ex#L13)

```elixir
@type t() :: %Orchid.Param{
  metadata: map(),
  name: name(),
  payload: payload(),
  type: param_type()
}
```

# `get_payload`
[🔗](https://github.com/SynapticStrings/Orchid/blob/main/lib/orchid/param.ex#L49)

```elixir
@spec get_payload(t()) :: payload()
```

# `new`
[🔗](https://github.com/SynapticStrings/Orchid/blob/main/lib/orchid/param.ex#L39)

```elixir
@spec new(name(), param_type(), payload(), %{}) :: t()
```

# `set_payload`
[🔗](https://github.com/SynapticStrings/Orchid/blob/main/lib/orchid/param.ex#L52)

```elixir
@spec set_payload(t(), payload()) :: t()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
