# `EtherCAT.Simulator.Transport.Udp.Fault`
[🔗](https://github.com/sid2baker/ethercat/blob/main/lib/ethercat/simulator/transport/udp/fault.ex#L1)

Builder API for `EtherCAT.Simulator.Transport.Udp.inject_fault/1`.

Typical usage:

    alias EtherCAT.Simulator.Transport.Udp
    alias EtherCAT.Simulator.Transport.Udp.Fault

    Udp.inject_fault(Fault.truncate())
    Udp.inject_fault(Fault.wrong_idx() |> Fault.next(3))
    Udp.inject_fault(Fault.script([Fault.unsupported_type(), Fault.replay_previous()]))
    Fault.describe(Fault.truncate() |> Fault.next(2))

# `mode`

```elixir
@type mode() :: :truncate | :unsupported_type | :wrong_idx | :replay_previous
```

# `t`

```elixir
@type t() :: %EtherCAT.Simulator.Transport.Udp.Fault{
  count: non_neg_integer(),
  kind: :counted | :script,
  mode: mode() | nil,
  script: [mode()] | nil
}
```

# `describe`

```elixir
@spec describe(t() | EtherCAT.Simulator.Transport.Udp.fault()) :: String.t()
```

# `next`

```elixir
@spec next(t(), pos_integer()) :: t()
```

# `normalize`

```elixir
@spec normalize(t() | EtherCAT.Simulator.Transport.Udp.fault()) ::
  {:ok, EtherCAT.Simulator.Transport.Udp.fault()} | :error
```

# `replay_previous`

```elixir
@spec replay_previous() :: t()
```

# `script`

```elixir
@spec script([t(), ...]) :: t()
```

# `truncate`

```elixir
@spec truncate() :: t()
```

# `unsupported_type`

```elixir
@spec unsupported_type() :: t()
```

# `wrong_idx`

```elixir
@spec wrong_idx() :: t()
```

---

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