void GridClientProtobufMarshaller::unwrap(const ObjectWrapper& objWrapper, GridClientMessageTopologyResult& topRslt) {
    ProtoResponse resp;

    unwrapResponse(objWrapper, resp);

    fillResponseHeader(resp, topRslt);

    std::vector<GridClientNode> nodes;

    if (resp.has_resultbean()) {
        if (resp.resultbean().type() == NODE_BEAN) {
            GridClientNode nodeBean;

            ::unwrap(resp.resultbean(), nodeBean);

            nodes.push_back(nodeBean);
        }
        else {
            assert(resp.resultbean().type() == COLLECTION);

            std::string binary = resp.resultbean().binary();

            ::Collection coll;

            unmarshalMsg((int8_t*) binary.c_str(), binary.size(), coll);

            unwrapCollection(coll.item(), nodes);

            assert(nodes.size() == (size_t) coll.item().size());
        }
    }

    topRslt.setNodes(nodes);
}