1*1b3f573fSAndroid Build Coastguard Worker // Protocol Buffers - Google's data interchange format 2*1b3f573fSAndroid Build Coastguard Worker // Copyright 2008 Google Inc. All rights reserved. 3*1b3f573fSAndroid Build Coastguard Worker // https://developers.google.com/protocol-buffers/ 4*1b3f573fSAndroid Build Coastguard Worker // 5*1b3f573fSAndroid Build Coastguard Worker // Redistribution and use in source and binary forms, with or without 6*1b3f573fSAndroid Build Coastguard Worker // modification, are permitted provided that the following conditions are 7*1b3f573fSAndroid Build Coastguard Worker // met: 8*1b3f573fSAndroid Build Coastguard Worker // 9*1b3f573fSAndroid Build Coastguard Worker // * Redistributions of source code must retain the above copyright 10*1b3f573fSAndroid Build Coastguard Worker // notice, this list of conditions and the following disclaimer. 11*1b3f573fSAndroid Build Coastguard Worker // * Redistributions in binary form must reproduce the above 12*1b3f573fSAndroid Build Coastguard Worker // copyright notice, this list of conditions and the following disclaimer 13*1b3f573fSAndroid Build Coastguard Worker // in the documentation and/or other materials provided with the 14*1b3f573fSAndroid Build Coastguard Worker // distribution. 15*1b3f573fSAndroid Build Coastguard Worker // * Neither the name of Google Inc. nor the names of its 16*1b3f573fSAndroid Build Coastguard Worker // contributors may be used to endorse or promote products derived from 17*1b3f573fSAndroid Build Coastguard Worker // this software without specific prior written permission. 18*1b3f573fSAndroid Build Coastguard Worker // 19*1b3f573fSAndroid Build Coastguard Worker // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20*1b3f573fSAndroid Build Coastguard Worker // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21*1b3f573fSAndroid Build Coastguard Worker // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22*1b3f573fSAndroid Build Coastguard Worker // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23*1b3f573fSAndroid Build Coastguard Worker // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24*1b3f573fSAndroid Build Coastguard Worker // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25*1b3f573fSAndroid Build Coastguard Worker // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26*1b3f573fSAndroid Build Coastguard Worker // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27*1b3f573fSAndroid Build Coastguard Worker // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28*1b3f573fSAndroid Build Coastguard Worker // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29*1b3f573fSAndroid Build Coastguard Worker // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30*1b3f573fSAndroid Build Coastguard Worker 31*1b3f573fSAndroid Build Coastguard Worker #import <Foundation/Foundation.h> 32*1b3f573fSAndroid Build Coastguard Worker 33*1b3f573fSAndroid Build Coastguard Worker #import "GPBBootstrap.h" 34*1b3f573fSAndroid Build Coastguard Worker 35*1b3f573fSAndroid Build Coastguard Worker @class GPBDescriptor; 36*1b3f573fSAndroid Build Coastguard Worker @class GPBCodedInputStream; 37*1b3f573fSAndroid Build Coastguard Worker @class GPBCodedOutputStream; 38*1b3f573fSAndroid Build Coastguard Worker @class GPBExtensionDescriptor; 39*1b3f573fSAndroid Build Coastguard Worker @class GPBExtensionRegistry; 40*1b3f573fSAndroid Build Coastguard Worker @class GPBFieldDescriptor; 41*1b3f573fSAndroid Build Coastguard Worker @class GPBUnknownFieldSet; 42*1b3f573fSAndroid Build Coastguard Worker 43*1b3f573fSAndroid Build Coastguard Worker NS_ASSUME_NONNULL_BEGIN 44*1b3f573fSAndroid Build Coastguard Worker 45*1b3f573fSAndroid Build Coastguard Worker CF_EXTERN_C_BEGIN 46*1b3f573fSAndroid Build Coastguard Worker 47*1b3f573fSAndroid Build Coastguard Worker /** NSError domain used for errors. */ 48*1b3f573fSAndroid Build Coastguard Worker extern NSString *const GPBMessageErrorDomain; 49*1b3f573fSAndroid Build Coastguard Worker 50*1b3f573fSAndroid Build Coastguard Worker /** Error codes for NSErrors originated in GPBMessage. */ 51*1b3f573fSAndroid Build Coastguard Worker typedef NS_ENUM(NSInteger, GPBMessageErrorCode) { 52*1b3f573fSAndroid Build Coastguard Worker /** Uncategorized error. */ 53*1b3f573fSAndroid Build Coastguard Worker GPBMessageErrorCodeOther = -100, 54*1b3f573fSAndroid Build Coastguard Worker /** Message couldn't be serialized because it is missing required fields. */ 55*1b3f573fSAndroid Build Coastguard Worker GPBMessageErrorCodeMissingRequiredField = -101, 56*1b3f573fSAndroid Build Coastguard Worker }; 57*1b3f573fSAndroid Build Coastguard Worker 58*1b3f573fSAndroid Build Coastguard Worker /** 59*1b3f573fSAndroid Build Coastguard Worker * Key under which the GPBMessage error's reason is stored inside the userInfo 60*1b3f573fSAndroid Build Coastguard Worker * dictionary. 61*1b3f573fSAndroid Build Coastguard Worker **/ 62*1b3f573fSAndroid Build Coastguard Worker extern NSString *const GPBErrorReasonKey; 63*1b3f573fSAndroid Build Coastguard Worker 64*1b3f573fSAndroid Build Coastguard Worker CF_EXTERN_C_END 65*1b3f573fSAndroid Build Coastguard Worker 66*1b3f573fSAndroid Build Coastguard Worker /** 67*1b3f573fSAndroid Build Coastguard Worker * Base class that each generated message subclasses from. 68*1b3f573fSAndroid Build Coastguard Worker * 69*1b3f573fSAndroid Build Coastguard Worker * @note @c NSCopying support is a "deep copy", in that all sub objects are 70*1b3f573fSAndroid Build Coastguard Worker * copied. Just like you wouldn't want a UIView/NSView trying to 71*1b3f573fSAndroid Build Coastguard Worker * exist in two places, you don't want a sub message to be a property 72*1b3f573fSAndroid Build Coastguard Worker * property of two other messages. 73*1b3f573fSAndroid Build Coastguard Worker * 74*1b3f573fSAndroid Build Coastguard Worker * @note While the class support NSSecureCoding, if the message has any 75*1b3f573fSAndroid Build Coastguard Worker * extensions, they will end up reloaded in @c unknownFields as there is 76*1b3f573fSAndroid Build Coastguard Worker * no way for the @c NSCoding plumbing to pass through a 77*1b3f573fSAndroid Build Coastguard Worker * @c GPBExtensionRegistry. To support extensions, instead of passing the 78*1b3f573fSAndroid Build Coastguard Worker * calls off to the Message, simple store the result of @c data, and then 79*1b3f573fSAndroid Build Coastguard Worker * when loading, fetch the data and use 80*1b3f573fSAndroid Build Coastguard Worker * @c +parseFromData:extensionRegistry:error: to provide an extension 81*1b3f573fSAndroid Build Coastguard Worker * registry. 82*1b3f573fSAndroid Build Coastguard Worker **/ 83*1b3f573fSAndroid Build Coastguard Worker @interface GPBMessage : NSObject<NSSecureCoding, NSCopying> 84*1b3f573fSAndroid Build Coastguard Worker 85*1b3f573fSAndroid Build Coastguard Worker // If you add an instance method/property to this class that may conflict with 86*1b3f573fSAndroid Build Coastguard Worker // fields declared in protos, you need to update objective_helpers.cc. The main 87*1b3f573fSAndroid Build Coastguard Worker // cases are methods that take no arguments, or setFoo:/hasFoo: type methods. 88*1b3f573fSAndroid Build Coastguard Worker 89*1b3f573fSAndroid Build Coastguard Worker /** 90*1b3f573fSAndroid Build Coastguard Worker * The set of unknown fields for this message. 91*1b3f573fSAndroid Build Coastguard Worker * 92*1b3f573fSAndroid Build Coastguard Worker * Only messages from proto files declared with "proto2" syntax support unknown 93*1b3f573fSAndroid Build Coastguard Worker * fields. For "proto3" syntax, any unknown fields found while parsing are 94*1b3f573fSAndroid Build Coastguard Worker * dropped. 95*1b3f573fSAndroid Build Coastguard Worker **/ 96*1b3f573fSAndroid Build Coastguard Worker @property(nonatomic, copy, nullable) GPBUnknownFieldSet *unknownFields; 97*1b3f573fSAndroid Build Coastguard Worker 98*1b3f573fSAndroid Build Coastguard Worker /** 99*1b3f573fSAndroid Build Coastguard Worker * Whether the message, along with all submessages, have the required fields 100*1b3f573fSAndroid Build Coastguard Worker * set. This is only applicable for files declared with "proto2" syntax, as 101*1b3f573fSAndroid Build Coastguard Worker * there are no required fields for "proto3" syntax. 102*1b3f573fSAndroid Build Coastguard Worker **/ 103*1b3f573fSAndroid Build Coastguard Worker @property(nonatomic, readonly, getter=isInitialized) BOOL initialized; 104*1b3f573fSAndroid Build Coastguard Worker 105*1b3f573fSAndroid Build Coastguard Worker /** 106*1b3f573fSAndroid Build Coastguard Worker * @return An autoreleased message with the default values set. 107*1b3f573fSAndroid Build Coastguard Worker **/ 108*1b3f573fSAndroid Build Coastguard Worker + (instancetype)message; 109*1b3f573fSAndroid Build Coastguard Worker 110*1b3f573fSAndroid Build Coastguard Worker /** 111*1b3f573fSAndroid Build Coastguard Worker * Creates a new instance by parsing the provided data. This method should be 112*1b3f573fSAndroid Build Coastguard Worker * sent to the generated message class that the data should be interpreted as. 113*1b3f573fSAndroid Build Coastguard Worker * If there is an error the method returns nil and the error is returned in 114*1b3f573fSAndroid Build Coastguard Worker * errorPtr (when provided). 115*1b3f573fSAndroid Build Coastguard Worker * 116*1b3f573fSAndroid Build Coastguard Worker * @note In DEBUG builds, the parsed message is checked to be sure all required 117*1b3f573fSAndroid Build Coastguard Worker * fields were provided, and the parse will fail if some are missing. 118*1b3f573fSAndroid Build Coastguard Worker * 119*1b3f573fSAndroid Build Coastguard Worker * @note The errors returned are likely coming from the domain and codes listed 120*1b3f573fSAndroid Build Coastguard Worker * at the top of this file and GPBCodedInputStream.h. 121*1b3f573fSAndroid Build Coastguard Worker * 122*1b3f573fSAndroid Build Coastguard Worker * @param data The data to parse. 123*1b3f573fSAndroid Build Coastguard Worker * @param errorPtr An optional error pointer to fill in with a failure reason if 124*1b3f573fSAndroid Build Coastguard Worker * the data can not be parsed. 125*1b3f573fSAndroid Build Coastguard Worker * 126*1b3f573fSAndroid Build Coastguard Worker * @return A new instance of the generated class. 127*1b3f573fSAndroid Build Coastguard Worker **/ 128*1b3f573fSAndroid Build Coastguard Worker + (nullable instancetype)parseFromData:(NSData *)data error:(NSError **)errorPtr; 129*1b3f573fSAndroid Build Coastguard Worker 130*1b3f573fSAndroid Build Coastguard Worker /** 131*1b3f573fSAndroid Build Coastguard Worker * Creates a new instance by parsing the data. This method should be sent to 132*1b3f573fSAndroid Build Coastguard Worker * the generated message class that the data should be interpreted as. If 133*1b3f573fSAndroid Build Coastguard Worker * there is an error the method returns nil and the error is returned in 134*1b3f573fSAndroid Build Coastguard Worker * errorPtr (when provided). 135*1b3f573fSAndroid Build Coastguard Worker * 136*1b3f573fSAndroid Build Coastguard Worker * @note In DEBUG builds, the parsed message is checked to be sure all required 137*1b3f573fSAndroid Build Coastguard Worker * fields were provided, and the parse will fail if some are missing. 138*1b3f573fSAndroid Build Coastguard Worker * 139*1b3f573fSAndroid Build Coastguard Worker * @note The errors returned are likely coming from the domain and codes listed 140*1b3f573fSAndroid Build Coastguard Worker * at the top of this file and GPBCodedInputStream.h. 141*1b3f573fSAndroid Build Coastguard Worker * 142*1b3f573fSAndroid Build Coastguard Worker * @param data The data to parse. 143*1b3f573fSAndroid Build Coastguard Worker * @param extensionRegistry The extension registry to use to look up extensions. 144*1b3f573fSAndroid Build Coastguard Worker * @param errorPtr An optional error pointer to fill in with a failure 145*1b3f573fSAndroid Build Coastguard Worker * reason if the data can not be parsed. 146*1b3f573fSAndroid Build Coastguard Worker * 147*1b3f573fSAndroid Build Coastguard Worker * @return A new instance of the generated class. 148*1b3f573fSAndroid Build Coastguard Worker **/ 149*1b3f573fSAndroid Build Coastguard Worker + (nullable instancetype)parseFromData:(NSData *)data 150*1b3f573fSAndroid Build Coastguard Worker extensionRegistry:(nullable GPBExtensionRegistry *)extensionRegistry 151*1b3f573fSAndroid Build Coastguard Worker error:(NSError **)errorPtr; 152*1b3f573fSAndroid Build Coastguard Worker 153*1b3f573fSAndroid Build Coastguard Worker /** 154*1b3f573fSAndroid Build Coastguard Worker * Creates a new instance by parsing the data from the given input stream. This 155*1b3f573fSAndroid Build Coastguard Worker * method should be sent to the generated message class that the data should 156*1b3f573fSAndroid Build Coastguard Worker * be interpreted as. If there is an error the method returns nil and the error 157*1b3f573fSAndroid Build Coastguard Worker * is returned in errorPtr (when provided). 158*1b3f573fSAndroid Build Coastguard Worker * 159*1b3f573fSAndroid Build Coastguard Worker * @note In DEBUG builds, the parsed message is checked to be sure all required 160*1b3f573fSAndroid Build Coastguard Worker * fields were provided, and the parse will fail if some are missing. 161*1b3f573fSAndroid Build Coastguard Worker * 162*1b3f573fSAndroid Build Coastguard Worker * @note The errors returned are likely coming from the domain and codes listed 163*1b3f573fSAndroid Build Coastguard Worker * at the top of this file and GPBCodedInputStream.h. 164*1b3f573fSAndroid Build Coastguard Worker * 165*1b3f573fSAndroid Build Coastguard Worker * @param input The stream to read data from. 166*1b3f573fSAndroid Build Coastguard Worker * @param extensionRegistry The extension registry to use to look up extensions. 167*1b3f573fSAndroid Build Coastguard Worker * @param errorPtr An optional error pointer to fill in with a failure 168*1b3f573fSAndroid Build Coastguard Worker * reason if the data can not be parsed. 169*1b3f573fSAndroid Build Coastguard Worker * 170*1b3f573fSAndroid Build Coastguard Worker * @return A new instance of the generated class. 171*1b3f573fSAndroid Build Coastguard Worker **/ 172*1b3f573fSAndroid Build Coastguard Worker + (nullable instancetype)parseFromCodedInputStream:(GPBCodedInputStream *)input 173*1b3f573fSAndroid Build Coastguard Worker extensionRegistry: 174*1b3f573fSAndroid Build Coastguard Worker (nullable GPBExtensionRegistry *)extensionRegistry 175*1b3f573fSAndroid Build Coastguard Worker error:(NSError **)errorPtr; 176*1b3f573fSAndroid Build Coastguard Worker 177*1b3f573fSAndroid Build Coastguard Worker /** 178*1b3f573fSAndroid Build Coastguard Worker * Creates a new instance by parsing the data from the given input stream. This 179*1b3f573fSAndroid Build Coastguard Worker * method should be sent to the generated message class that the data should 180*1b3f573fSAndroid Build Coastguard Worker * be interpreted as. If there is an error the method returns nil and the error 181*1b3f573fSAndroid Build Coastguard Worker * is returned in errorPtr (when provided). 182*1b3f573fSAndroid Build Coastguard Worker * 183*1b3f573fSAndroid Build Coastguard Worker * @note Unlike the parseFrom... methods, this never checks to see if all of 184*1b3f573fSAndroid Build Coastguard Worker * the required fields are set. So this method can be used to reload 185*1b3f573fSAndroid Build Coastguard Worker * messages that may not be complete. 186*1b3f573fSAndroid Build Coastguard Worker * 187*1b3f573fSAndroid Build Coastguard Worker * @note The errors returned are likely coming from the domain and codes listed 188*1b3f573fSAndroid Build Coastguard Worker * at the top of this file and GPBCodedInputStream.h. 189*1b3f573fSAndroid Build Coastguard Worker * 190*1b3f573fSAndroid Build Coastguard Worker * @param input The stream to read data from. 191*1b3f573fSAndroid Build Coastguard Worker * @param extensionRegistry The extension registry to use to look up extensions. 192*1b3f573fSAndroid Build Coastguard Worker * @param errorPtr An optional error pointer to fill in with a failure 193*1b3f573fSAndroid Build Coastguard Worker * reason if the data can not be parsed. 194*1b3f573fSAndroid Build Coastguard Worker * 195*1b3f573fSAndroid Build Coastguard Worker * @return A new instance of the generated class. 196*1b3f573fSAndroid Build Coastguard Worker **/ 197*1b3f573fSAndroid Build Coastguard Worker + (nullable instancetype)parseDelimitedFromCodedInputStream:(GPBCodedInputStream *)input 198*1b3f573fSAndroid Build Coastguard Worker extensionRegistry: 199*1b3f573fSAndroid Build Coastguard Worker (nullable GPBExtensionRegistry *)extensionRegistry 200*1b3f573fSAndroid Build Coastguard Worker error:(NSError **)errorPtr; 201*1b3f573fSAndroid Build Coastguard Worker 202*1b3f573fSAndroid Build Coastguard Worker /** 203*1b3f573fSAndroid Build Coastguard Worker * Initializes an instance by parsing the data. This method should be sent to 204*1b3f573fSAndroid Build Coastguard Worker * the generated message class that the data should be interpreted as. If 205*1b3f573fSAndroid Build Coastguard Worker * there is an error the method returns nil and the error is returned in 206*1b3f573fSAndroid Build Coastguard Worker * errorPtr (when provided). 207*1b3f573fSAndroid Build Coastguard Worker * 208*1b3f573fSAndroid Build Coastguard Worker * @note In DEBUG builds, the parsed message is checked to be sure all required 209*1b3f573fSAndroid Build Coastguard Worker * fields were provided, and the parse will fail if some are missing. 210*1b3f573fSAndroid Build Coastguard Worker * 211*1b3f573fSAndroid Build Coastguard Worker * @note The errors returned are likely coming from the domain and codes listed 212*1b3f573fSAndroid Build Coastguard Worker * at the top of this file and GPBCodedInputStream.h. 213*1b3f573fSAndroid Build Coastguard Worker * 214*1b3f573fSAndroid Build Coastguard Worker * @param data The data to parse. 215*1b3f573fSAndroid Build Coastguard Worker * @param errorPtr An optional error pointer to fill in with a failure reason if 216*1b3f573fSAndroid Build Coastguard Worker * the data can not be parsed. 217*1b3f573fSAndroid Build Coastguard Worker * 218*1b3f573fSAndroid Build Coastguard Worker * @return An initialized instance of the generated class. 219*1b3f573fSAndroid Build Coastguard Worker **/ 220*1b3f573fSAndroid Build Coastguard Worker - (nullable instancetype)initWithData:(NSData *)data error:(NSError **)errorPtr; 221*1b3f573fSAndroid Build Coastguard Worker 222*1b3f573fSAndroid Build Coastguard Worker /** 223*1b3f573fSAndroid Build Coastguard Worker * Initializes an instance by parsing the data. This method should be sent to 224*1b3f573fSAndroid Build Coastguard Worker * the generated message class that the data should be interpreted as. If 225*1b3f573fSAndroid Build Coastguard Worker * there is an error the method returns nil and the error is returned in 226*1b3f573fSAndroid Build Coastguard Worker * errorPtr (when provided). 227*1b3f573fSAndroid Build Coastguard Worker * 228*1b3f573fSAndroid Build Coastguard Worker * @note In DEBUG builds, the parsed message is checked to be sure all required 229*1b3f573fSAndroid Build Coastguard Worker * fields were provided, and the parse will fail if some are missing. 230*1b3f573fSAndroid Build Coastguard Worker * 231*1b3f573fSAndroid Build Coastguard Worker * @note The errors returned are likely coming from the domain and codes listed 232*1b3f573fSAndroid Build Coastguard Worker * at the top of this file and GPBCodedInputStream.h. 233*1b3f573fSAndroid Build Coastguard Worker * 234*1b3f573fSAndroid Build Coastguard Worker * @param data The data to parse. 235*1b3f573fSAndroid Build Coastguard Worker * @param extensionRegistry The extension registry to use to look up extensions. 236*1b3f573fSAndroid Build Coastguard Worker * @param errorPtr An optional error pointer to fill in with a failure 237*1b3f573fSAndroid Build Coastguard Worker * reason if the data can not be parsed. 238*1b3f573fSAndroid Build Coastguard Worker * 239*1b3f573fSAndroid Build Coastguard Worker * @return An initialized instance of the generated class. 240*1b3f573fSAndroid Build Coastguard Worker **/ 241*1b3f573fSAndroid Build Coastguard Worker - (nullable instancetype)initWithData:(NSData *)data 242*1b3f573fSAndroid Build Coastguard Worker extensionRegistry:(nullable GPBExtensionRegistry *)extensionRegistry 243*1b3f573fSAndroid Build Coastguard Worker error:(NSError **)errorPtr; 244*1b3f573fSAndroid Build Coastguard Worker 245*1b3f573fSAndroid Build Coastguard Worker /** 246*1b3f573fSAndroid Build Coastguard Worker * Initializes an instance by parsing the data from the given input stream. This 247*1b3f573fSAndroid Build Coastguard Worker * method should be sent to the generated message class that the data should 248*1b3f573fSAndroid Build Coastguard Worker * be interpreted as. If there is an error the method returns nil and the error 249*1b3f573fSAndroid Build Coastguard Worker * is returned in errorPtr (when provided). 250*1b3f573fSAndroid Build Coastguard Worker * 251*1b3f573fSAndroid Build Coastguard Worker * @note Unlike the parseFrom... methods, this never checks to see if all of 252*1b3f573fSAndroid Build Coastguard Worker * the required fields are set. So this method can be used to reload 253*1b3f573fSAndroid Build Coastguard Worker * messages that may not be complete. 254*1b3f573fSAndroid Build Coastguard Worker * 255*1b3f573fSAndroid Build Coastguard Worker * @note The errors returned are likely coming from the domain and codes listed 256*1b3f573fSAndroid Build Coastguard Worker * at the top of this file and GPBCodedInputStream.h. 257*1b3f573fSAndroid Build Coastguard Worker * 258*1b3f573fSAndroid Build Coastguard Worker * @param input The stream to read data from. 259*1b3f573fSAndroid Build Coastguard Worker * @param extensionRegistry The extension registry to use to look up extensions. 260*1b3f573fSAndroid Build Coastguard Worker * @param errorPtr An optional error pointer to fill in with a failure 261*1b3f573fSAndroid Build Coastguard Worker * reason if the data can not be parsed. 262*1b3f573fSAndroid Build Coastguard Worker * 263*1b3f573fSAndroid Build Coastguard Worker * @return An initialized instance of the generated class. 264*1b3f573fSAndroid Build Coastguard Worker **/ 265*1b3f573fSAndroid Build Coastguard Worker - (nullable instancetype)initWithCodedInputStream:(GPBCodedInputStream *)input 266*1b3f573fSAndroid Build Coastguard Worker extensionRegistry: 267*1b3f573fSAndroid Build Coastguard Worker (nullable GPBExtensionRegistry *)extensionRegistry 268*1b3f573fSAndroid Build Coastguard Worker error:(NSError **)errorPtr; 269*1b3f573fSAndroid Build Coastguard Worker 270*1b3f573fSAndroid Build Coastguard Worker /** 271*1b3f573fSAndroid Build Coastguard Worker * Parses the given data as this message's class, and merges those values into 272*1b3f573fSAndroid Build Coastguard Worker * this message. 273*1b3f573fSAndroid Build Coastguard Worker * 274*1b3f573fSAndroid Build Coastguard Worker * @param data The binary representation of the message to merge. 275*1b3f573fSAndroid Build Coastguard Worker * @param extensionRegistry The extension registry to use to look up extensions. 276*1b3f573fSAndroid Build Coastguard Worker * 277*1b3f573fSAndroid Build Coastguard Worker * @exception GPBCodedInputStreamException Exception thrown when parsing was 278*1b3f573fSAndroid Build Coastguard Worker * unsuccessful. 279*1b3f573fSAndroid Build Coastguard Worker **/ 280*1b3f573fSAndroid Build Coastguard Worker - (void)mergeFromData:(NSData *)data 281*1b3f573fSAndroid Build Coastguard Worker extensionRegistry:(nullable GPBExtensionRegistry *)extensionRegistry; 282*1b3f573fSAndroid Build Coastguard Worker 283*1b3f573fSAndroid Build Coastguard Worker /** 284*1b3f573fSAndroid Build Coastguard Worker * Merges the fields from another message (of the same type) into this 285*1b3f573fSAndroid Build Coastguard Worker * message. 286*1b3f573fSAndroid Build Coastguard Worker * 287*1b3f573fSAndroid Build Coastguard Worker * @param other Message to merge into this message. 288*1b3f573fSAndroid Build Coastguard Worker **/ 289*1b3f573fSAndroid Build Coastguard Worker - (void)mergeFrom:(GPBMessage *)other; 290*1b3f573fSAndroid Build Coastguard Worker 291*1b3f573fSAndroid Build Coastguard Worker /** 292*1b3f573fSAndroid Build Coastguard Worker * Writes out the message to the given coded output stream. 293*1b3f573fSAndroid Build Coastguard Worker * 294*1b3f573fSAndroid Build Coastguard Worker * @param output The coded output stream into which to write the message. 295*1b3f573fSAndroid Build Coastguard Worker * 296*1b3f573fSAndroid Build Coastguard Worker * @note This can raise the GPBCodedOutputStreamException_* exceptions. 297*1b3f573fSAndroid Build Coastguard Worker * 298*1b3f573fSAndroid Build Coastguard Worker **/ 299*1b3f573fSAndroid Build Coastguard Worker - (void)writeToCodedOutputStream:(GPBCodedOutputStream *)output; 300*1b3f573fSAndroid Build Coastguard Worker 301*1b3f573fSAndroid Build Coastguard Worker /** 302*1b3f573fSAndroid Build Coastguard Worker * Writes out the message to the given output stream. 303*1b3f573fSAndroid Build Coastguard Worker * 304*1b3f573fSAndroid Build Coastguard Worker * @param output The output stream into which to write the message. 305*1b3f573fSAndroid Build Coastguard Worker * 306*1b3f573fSAndroid Build Coastguard Worker * @note This can raise the GPBCodedOutputStreamException_* exceptions. 307*1b3f573fSAndroid Build Coastguard Worker **/ 308*1b3f573fSAndroid Build Coastguard Worker - (void)writeToOutputStream:(NSOutputStream *)output; 309*1b3f573fSAndroid Build Coastguard Worker 310*1b3f573fSAndroid Build Coastguard Worker /** 311*1b3f573fSAndroid Build Coastguard Worker * Writes out a varint for the message size followed by the message to 312*1b3f573fSAndroid Build Coastguard Worker * the given output stream. 313*1b3f573fSAndroid Build Coastguard Worker * 314*1b3f573fSAndroid Build Coastguard Worker * @param output The coded output stream into which to write the message. 315*1b3f573fSAndroid Build Coastguard Worker * 316*1b3f573fSAndroid Build Coastguard Worker * @note This can raise the GPBCodedOutputStreamException_* exceptions. 317*1b3f573fSAndroid Build Coastguard Worker **/ 318*1b3f573fSAndroid Build Coastguard Worker - (void)writeDelimitedToCodedOutputStream:(GPBCodedOutputStream *)output; 319*1b3f573fSAndroid Build Coastguard Worker 320*1b3f573fSAndroid Build Coastguard Worker /** 321*1b3f573fSAndroid Build Coastguard Worker * Writes out a varint for the message size followed by the message to 322*1b3f573fSAndroid Build Coastguard Worker * the given output stream. 323*1b3f573fSAndroid Build Coastguard Worker * 324*1b3f573fSAndroid Build Coastguard Worker * @param output The output stream into which to write the message. 325*1b3f573fSAndroid Build Coastguard Worker * 326*1b3f573fSAndroid Build Coastguard Worker * @note This can raise the GPBCodedOutputStreamException_* exceptions. 327*1b3f573fSAndroid Build Coastguard Worker **/ 328*1b3f573fSAndroid Build Coastguard Worker - (void)writeDelimitedToOutputStream:(NSOutputStream *)output; 329*1b3f573fSAndroid Build Coastguard Worker 330*1b3f573fSAndroid Build Coastguard Worker /** 331*1b3f573fSAndroid Build Coastguard Worker * Serializes the message to an NSData. 332*1b3f573fSAndroid Build Coastguard Worker * 333*1b3f573fSAndroid Build Coastguard Worker * If there is an error while generating the data, nil is returned. 334*1b3f573fSAndroid Build Coastguard Worker * 335*1b3f573fSAndroid Build Coastguard Worker * @note This value is not cached, so if you are using it repeatedly, cache 336*1b3f573fSAndroid Build Coastguard Worker * it yourself. 337*1b3f573fSAndroid Build Coastguard Worker * 338*1b3f573fSAndroid Build Coastguard Worker * @note In DEBUG ONLY, the message is also checked for all required field, 339*1b3f573fSAndroid Build Coastguard Worker * if one is missing, nil will be returned. 340*1b3f573fSAndroid Build Coastguard Worker * 341*1b3f573fSAndroid Build Coastguard Worker * @return The binary representation of the message. 342*1b3f573fSAndroid Build Coastguard Worker **/ 343*1b3f573fSAndroid Build Coastguard Worker - (nullable NSData *)data; 344*1b3f573fSAndroid Build Coastguard Worker 345*1b3f573fSAndroid Build Coastguard Worker /** 346*1b3f573fSAndroid Build Coastguard Worker * Serializes a varint with the message size followed by the message data, 347*1b3f573fSAndroid Build Coastguard Worker * returning that as an NSData. 348*1b3f573fSAndroid Build Coastguard Worker * 349*1b3f573fSAndroid Build Coastguard Worker * @note This value is not cached, so if you are using it repeatedly, it is 350*1b3f573fSAndroid Build Coastguard Worker * recommended to keep a local copy. 351*1b3f573fSAndroid Build Coastguard Worker * 352*1b3f573fSAndroid Build Coastguard Worker * @return The binary representation of the size along with the message. 353*1b3f573fSAndroid Build Coastguard Worker **/ 354*1b3f573fSAndroid Build Coastguard Worker - (NSData *)delimitedData; 355*1b3f573fSAndroid Build Coastguard Worker 356*1b3f573fSAndroid Build Coastguard Worker /** 357*1b3f573fSAndroid Build Coastguard Worker * Calculates the size of the object if it were serialized. 358*1b3f573fSAndroid Build Coastguard Worker * 359*1b3f573fSAndroid Build Coastguard Worker * This is not a cached value. If you are following a pattern like this: 360*1b3f573fSAndroid Build Coastguard Worker * 361*1b3f573fSAndroid Build Coastguard Worker * ``` 362*1b3f573fSAndroid Build Coastguard Worker * size_t size = [aMsg serializedSize]; 363*1b3f573fSAndroid Build Coastguard Worker * NSMutableData *foo = [NSMutableData dataWithCapacity:size + sizeof(size)]; 364*1b3f573fSAndroid Build Coastguard Worker * [foo writeSize:size]; 365*1b3f573fSAndroid Build Coastguard Worker * [foo appendData:[aMsg data]]; 366*1b3f573fSAndroid Build Coastguard Worker * ``` 367*1b3f573fSAndroid Build Coastguard Worker * 368*1b3f573fSAndroid Build Coastguard Worker * you would be better doing: 369*1b3f573fSAndroid Build Coastguard Worker * 370*1b3f573fSAndroid Build Coastguard Worker * ``` 371*1b3f573fSAndroid Build Coastguard Worker * NSData *data = [aMsg data]; 372*1b3f573fSAndroid Build Coastguard Worker * NSUInteger size = [aMsg length]; 373*1b3f573fSAndroid Build Coastguard Worker * NSMutableData *foo = [NSMutableData dataWithCapacity:size + sizeof(size)]; 374*1b3f573fSAndroid Build Coastguard Worker * [foo writeSize:size]; 375*1b3f573fSAndroid Build Coastguard Worker * [foo appendData:data]; 376*1b3f573fSAndroid Build Coastguard Worker * ``` 377*1b3f573fSAndroid Build Coastguard Worker * 378*1b3f573fSAndroid Build Coastguard Worker * @return The size of the message in it's binary representation. 379*1b3f573fSAndroid Build Coastguard Worker **/ 380*1b3f573fSAndroid Build Coastguard Worker - (size_t)serializedSize; 381*1b3f573fSAndroid Build Coastguard Worker 382*1b3f573fSAndroid Build Coastguard Worker /** 383*1b3f573fSAndroid Build Coastguard Worker * @return The descriptor for the message class. 384*1b3f573fSAndroid Build Coastguard Worker **/ 385*1b3f573fSAndroid Build Coastguard Worker + (GPBDescriptor *)descriptor; 386*1b3f573fSAndroid Build Coastguard Worker 387*1b3f573fSAndroid Build Coastguard Worker /** 388*1b3f573fSAndroid Build Coastguard Worker * Return the descriptor for the message. 389*1b3f573fSAndroid Build Coastguard Worker **/ 390*1b3f573fSAndroid Build Coastguard Worker - (GPBDescriptor *)descriptor; 391*1b3f573fSAndroid Build Coastguard Worker 392*1b3f573fSAndroid Build Coastguard Worker /** 393*1b3f573fSAndroid Build Coastguard Worker * @return An array with the extension descriptors that are currently set on the 394*1b3f573fSAndroid Build Coastguard Worker * message. 395*1b3f573fSAndroid Build Coastguard Worker **/ 396*1b3f573fSAndroid Build Coastguard Worker - (NSArray *)extensionsCurrentlySet; 397*1b3f573fSAndroid Build Coastguard Worker 398*1b3f573fSAndroid Build Coastguard Worker /** 399*1b3f573fSAndroid Build Coastguard Worker * Checks whether there is an extension set on the message which matches the 400*1b3f573fSAndroid Build Coastguard Worker * given extension descriptor. 401*1b3f573fSAndroid Build Coastguard Worker * 402*1b3f573fSAndroid Build Coastguard Worker * @param extension Extension descriptor to check if it's set on the message. 403*1b3f573fSAndroid Build Coastguard Worker * 404*1b3f573fSAndroid Build Coastguard Worker * @return Whether the extension is currently set on the message. 405*1b3f573fSAndroid Build Coastguard Worker **/ 406*1b3f573fSAndroid Build Coastguard Worker - (BOOL)hasExtension:(GPBExtensionDescriptor *)extension; 407*1b3f573fSAndroid Build Coastguard Worker 408*1b3f573fSAndroid Build Coastguard Worker /* 409*1b3f573fSAndroid Build Coastguard Worker * Fetches the given extension's value for this message. 410*1b3f573fSAndroid Build Coastguard Worker * 411*1b3f573fSAndroid Build Coastguard Worker * Extensions use boxed values (NSNumbers) for PODs and NSMutableArrays for 412*1b3f573fSAndroid Build Coastguard Worker * repeated fields. If the extension is a Message one will be auto created for 413*1b3f573fSAndroid Build Coastguard Worker * you and returned similar to fields. 414*1b3f573fSAndroid Build Coastguard Worker * 415*1b3f573fSAndroid Build Coastguard Worker * @param extension The extension descriptor of the extension to fetch. 416*1b3f573fSAndroid Build Coastguard Worker * 417*1b3f573fSAndroid Build Coastguard Worker * @return The extension matching the given descriptor, or nil if none found. 418*1b3f573fSAndroid Build Coastguard Worker **/ 419*1b3f573fSAndroid Build Coastguard Worker - (nullable id)getExtension:(GPBExtensionDescriptor *)extension; 420*1b3f573fSAndroid Build Coastguard Worker 421*1b3f573fSAndroid Build Coastguard Worker /** 422*1b3f573fSAndroid Build Coastguard Worker * Sets the given extension's value for this message. This only applies for 423*1b3f573fSAndroid Build Coastguard Worker * single field extensions (i.e. - not repeated fields). 424*1b3f573fSAndroid Build Coastguard Worker * 425*1b3f573fSAndroid Build Coastguard Worker * Extensions use boxed values (NSNumbers). 426*1b3f573fSAndroid Build Coastguard Worker * 427*1b3f573fSAndroid Build Coastguard Worker * @param extension The extension descriptor under which to set the value. 428*1b3f573fSAndroid Build Coastguard Worker * @param value The value to be set as the extension. 429*1b3f573fSAndroid Build Coastguard Worker **/ 430*1b3f573fSAndroid Build Coastguard Worker - (void)setExtension:(GPBExtensionDescriptor *)extension 431*1b3f573fSAndroid Build Coastguard Worker value:(nullable id)value; 432*1b3f573fSAndroid Build Coastguard Worker 433*1b3f573fSAndroid Build Coastguard Worker /** 434*1b3f573fSAndroid Build Coastguard Worker * Adds the given value to the extension for this message. This only applies 435*1b3f573fSAndroid Build Coastguard Worker * to repeated field extensions. If the field is a repeated POD type, the value 436*1b3f573fSAndroid Build Coastguard Worker * should be an NSNumber. 437*1b3f573fSAndroid Build Coastguard Worker * 438*1b3f573fSAndroid Build Coastguard Worker * @param extension The extension descriptor under which to add the value. 439*1b3f573fSAndroid Build Coastguard Worker * @param value The value to be added to the repeated extension. 440*1b3f573fSAndroid Build Coastguard Worker **/ 441*1b3f573fSAndroid Build Coastguard Worker - (void)addExtension:(GPBExtensionDescriptor *)extension value:(id)value; 442*1b3f573fSAndroid Build Coastguard Worker 443*1b3f573fSAndroid Build Coastguard Worker /** 444*1b3f573fSAndroid Build Coastguard Worker * Replaces the value at the given index with the given value for the extension 445*1b3f573fSAndroid Build Coastguard Worker * on this message. This only applies to repeated field extensions. If the field 446*1b3f573fSAndroid Build Coastguard Worker * is a repeated POD type, the value is should be an NSNumber. 447*1b3f573fSAndroid Build Coastguard Worker * 448*1b3f573fSAndroid Build Coastguard Worker * @param extension The extension descriptor under which to replace the value. 449*1b3f573fSAndroid Build Coastguard Worker * @param index The index of the extension to be replaced. 450*1b3f573fSAndroid Build Coastguard Worker * @param value The value to be replaced in the repeated extension. 451*1b3f573fSAndroid Build Coastguard Worker **/ 452*1b3f573fSAndroid Build Coastguard Worker - (void)setExtension:(GPBExtensionDescriptor *)extension 453*1b3f573fSAndroid Build Coastguard Worker index:(NSUInteger)index 454*1b3f573fSAndroid Build Coastguard Worker value:(id)value; 455*1b3f573fSAndroid Build Coastguard Worker 456*1b3f573fSAndroid Build Coastguard Worker /** 457*1b3f573fSAndroid Build Coastguard Worker * Clears the given extension for this message. 458*1b3f573fSAndroid Build Coastguard Worker * 459*1b3f573fSAndroid Build Coastguard Worker * @param extension The extension descriptor to be cleared from this message. 460*1b3f573fSAndroid Build Coastguard Worker **/ 461*1b3f573fSAndroid Build Coastguard Worker - (void)clearExtension:(GPBExtensionDescriptor *)extension; 462*1b3f573fSAndroid Build Coastguard Worker 463*1b3f573fSAndroid Build Coastguard Worker /** 464*1b3f573fSAndroid Build Coastguard Worker * Resets all of the fields of this message to their default values. 465*1b3f573fSAndroid Build Coastguard Worker **/ 466*1b3f573fSAndroid Build Coastguard Worker - (void)clear; 467*1b3f573fSAndroid Build Coastguard Worker 468*1b3f573fSAndroid Build Coastguard Worker @end 469*1b3f573fSAndroid Build Coastguard Worker 470*1b3f573fSAndroid Build Coastguard Worker NS_ASSUME_NONNULL_END 471