// // upb - a minimalist implementation of protocol buffers. // // Copyright (c) 2011-2012 Google Inc. See LICENSE for details. // Author: Josh Haberman // // Support for registering field handlers that can write into a proto2 // message that uses GeneratedMessageReflection (which includes all messages // generated by the proto2 compiler as well as DynamicMessage). // // This is a low-level interface; the high-level interface in google.h is // more user-friendly. #ifndef UPB_GOOGLE_PROTO2_H_ #define UPB_GOOGLE_PROTO2_H_ namespace proto2 { class FieldDescriptor; class Message; } namespace google { namespace protobuf { class FieldDescriptor; class Message; } } namespace upb { class FieldDef; class Handlers; } namespace upb { namespace google { // Sets field handlers in the given Handlers object for writing to a single // field (as described by "proto2_f" and "upb_f") into a message constructed // by the same factory as "prototype." Returns true if this was successful // (this will fail if "prototype" is not a proto1 message, or if we can't // handle it for some reason). bool TrySetWriteHandlers(const proto2::FieldDescriptor* proto2_f, const proto2::Message& prototype, const upb::FieldDef* upb_f, upb::Handlers* h); bool TrySetWriteHandlers(const ::google::protobuf::FieldDescriptor* proto2_f, const ::google::protobuf::Message& prototype, const upb::FieldDef* upb_f, upb::Handlers* h); // Returns a prototype for the given field in "m", if it is weak. The returned // message could be the linked-in message type or OpaqueMessage, if the weak // message is *not* linked in. Otherwise returns NULL. const proto2::Message* GetFieldPrototype(const proto2::Message& m, const proto2::FieldDescriptor* f); const ::google::protobuf::Message* GetFieldPrototype( const ::google::protobuf::Message& m, const ::google::protobuf::FieldDescriptor* f); } // namespace google } // namespace upb #endif // UPB_GOOGLE_PROTO2_H_