* *. complex: simple object, complex object, enum, struct etc.
*
* TODO: How do we want to handle the case of A having B and C as properties, and B and C both have D as a property? if we serialize and then deserialize, we'll end up with D1 and D2 separate; we might want to have some memory identifier to tell if we've already deserialised something and then we can just pioint to that.
// TODO: so, if someone implements list_properties, but they don't create there array until called, that could be inefficient if they don't cache. If they create it at construction, then serialising and deserialising will lose it? offer guidance
// TODO: so, if someone implements list_properties, but they don't create there array until called, that could be inefficient if they don't cache. If they create it at construction, then serialising and deserialising will lose it? offer guidance