# `VerifiedPubSub.Dsl.Topic`
[🔗](https://github.com/CuriousCurmudgeon/verified_pubsub/blob/v0.1.0/lib/verified_pubsub/dsl/topic.ex#L1)

A topic that a manifest declares, with its wire segments and its events.

# `segment`

```elixir
@type segment() :: String.t() | atom()
```

A segment of a topic. A string is a literal, and an atom is a param.

# `t`

```elixir
@type t() :: %VerifiedPubSub.Dsl.Topic{
  __identifier__: term(),
  __spark_metadata__: term(),
  description: String.t() | nil,
  messages: [VerifiedPubSub.Dsl.Message.t()],
  name: atom(),
  params: [atom()],
  segments: [segment()]
}
```

The fields of the topic:

  * `name`: the name that call sites use.
  * `segments`: the segments of the wire topic.
  * `description`: the description, or `nil`.
  * `params`: the params, in the order of the segments.
  * `messages`: the events of the topic.
  * `__identifier__` and `__spark_metadata__`: Spark sets these.

---

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