I’m trying to understand more about protobuf DynamicMessage. If I have a message Animal that is coming from an input stream, code that has the Animal protoc java type (say AnimalProto) will use that type directly to deserialize. Whereas a code without the compile time dependency on AnimalProto but has access to the Type descriptor will use that Type descriptor