https://github.com/RobotWebTools/rosbridge_suite/blob/ros2/ROSBRIDGE_PROTOCOL.md
TODO this should be deeply partial when outgoing, because rosbridge will "fill in the blanks", but it's not partial when incoming - need to figure out a way to represent this.
Optional
https://github.com/RobotWebTools/rosbridge_suite/blob/ros2/ROSBRIDGE_PROTOCOL.md