# gen

This library is used to generate the `go-fed/activity/vocab` library
implementation. Changes to this will fundamentally change the implementation of
the `vocab` library. If custom ActivityStream types are required, no changes to
this are required. Instead, the `go-fed/activity/tools/defs` library will need
edits.

Creating a static type implementation from the specification is not
straightforward due to the following considerations that stem from its roots in
JSON-LD:

* Any property could be an IRI (`url.URL`)
* Most properties could be another ActivityStream type
  (`map[string]interface{}`) or a value (`time.Time`, etc)
* Most properties can have multiple values (`[]interface{}`)
* In a multiple value scenario, each value could once more be an IRI, another
  ActivityStream type, or a value

The current generation algorithm leaves ample opportunity for improvements and
optimizations.
