I forgot that I started writing a ActivityPub implementation in #C++. I'm looking at it now and frowning at how I was taking the manual approach to these types. Thinking more in #Elixir is making me realize that protocols (contracts) are regal.
Going to delete ~40 files to be replaced with "ActivityStream::Unit" that reads in a 'definition' file that allows for extension and then makes a "type" based on that. Extensible (esp for remote adaptions that build on it).