I'm curious about why MooseX::Storage (mentioned previously in this thread) wasn't up to the task?
Because I consider that case "object inside object inside object" is common case, and should be solved without any Moose code, just by mentioning "This is a subobject of following type". Like this:
j_obj "icon" =>(class => "WebService::DreamWidth::Icon", is =>'ro');
I even thinking about removing "is =>'ro'", making it default. In simple case developer should just list attributes and child objects. This is not case for MooseX::Storage