# `Statifier.Document.Send`
[🔗](https://github.com/riddler/statifier-ex/blob/v2.0.0/lib/statifier/document/send.ex#L1)

A `<send>` element: spec 6.2's instruction to send an event, immediately or
after a delay.

Every mutually exclusive attribute pairing 6.2.1 names is nonetheless
simultaneously representable here, on purpose, so
`Statifier.Validator.Checks.Send` can report the shape rather than
lowering refusing to build it - the same division of labour
`Statifier.Document.Invoke`'s moduledoc describes for its own attributes:

- `event` "Must not occur with the 'eventexpr' attribute."
- `target` "Must not occur with the 'targetexpr' attribute."
- `type` "Must not occur with the 'typeexpr' attribute."
- `id` "Must not occur with the 'idlocation' attribute."
- `delay` "Must not occur with the 'delayexpr' attribute or when the
  attribute 'target' has the value '_internal'."
- `namelist` "Must not occur with the `<param>` element."

`namelist` is `[String.t()]` from a whitespace-split `namelist` attribute
(5.9.2's space-separated list of location expressions), mirroring
`Statifier.Document.Invoke.namelist`. `params` and `content` are built the
same way `Statifier.Document.Invoke`'s own `params`/`content` are - one
slot each, filled by `Statifier.Lowering.Builders.place/3`'s `%Send{}`
clauses as `<param>`/`<content>` children are walked.

Unlike `<invoke>`, `<send>` is executable content: it is tagged
`{:content_node, send}` by `Statifier.Lowering.Builders.build_send/2` and
lands in a block's own `content` list through the placement clauses every
other content node already uses, rather than through a dedicated
state-level slot.

# `t`

```elixir
@type t() :: %Statifier.Document.Send{
  attribute_locations: Statifier.Document.attribute_locations(),
  content: Statifier.Document.Content.t() | nil,
  delay: String.t() | nil,
  delayexpr: String.t() | nil,
  event: String.t() | nil,
  eventexpr: String.t() | nil,
  id: String.t() | nil,
  idlocation: String.t() | nil,
  location: Statifier.Parser.Location.t(),
  namelist: [String.t()],
  params: [Statifier.Document.Param.t()],
  target: String.t() | nil,
  targetexpr: String.t() | nil,
  type: String.t() | nil,
  typeexpr: String.t() | nil
}
```

---

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