// Generated by the protocol buffer compiler.  DO NOT EDIT!

#import "App_log.pb.h"
// @@protoc_insertion_point(imports)

@implementation AppLogRoot
static PBExtensionRegistry* extensionRegistry = nil;
+ (PBExtensionRegistry*) extensionRegistry {
  return extensionRegistry;
}

+ (void) initialize {
  if (self == [AppLogRoot class]) {
    PBMutableExtensionRegistry* registry = [PBMutableExtensionRegistry registry];
    [self registerAllExtensions:registry];
    [WeavePairingSessionLogRoot registerAllExtensions:registry];
    extensionRegistry = registry;
  }
}
+ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry {
}
@end

@interface AppLog ()
@property (strong) WeavePairingSessionLog* weavePairingSessionLog;
@end

@implementation AppLog

- (BOOL) hasWeavePairingSessionLog {
  return !!hasWeavePairingSessionLog_;
}
- (void) setHasWeavePairingSessionLog:(BOOL) value_ {
  hasWeavePairingSessionLog_ = !!value_;
}
@synthesize weavePairingSessionLog;
- (id) init {
  if ((self = [super init])) {
    self.weavePairingSessionLog = [WeavePairingSessionLog defaultInstance];
  }
  return self;
}
static AppLog* defaultAppLogInstance = nil;
+ (void) initialize {
  if (self == [AppLog class]) {
    defaultAppLogInstance = [[AppLog alloc] init];
  }
}
+ (AppLog*) defaultInstance {
  return defaultAppLogInstance;
}
- (AppLog*) defaultInstance {
  return defaultAppLogInstance;
}
- (BOOL) isInitialized {
  return YES;
}
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
  if (self.hasWeavePairingSessionLog) {
    [output writeMessage:1 value:self.weavePairingSessionLog];
  }
  [self.unknownFields writeToCodedOutputStream:output];
}
- (SInt32) serializedSize {
  __block SInt32 size_ = memoizedSerializedSize;
  if (size_ != -1) {
    return size_;
  }

  size_ = 0;
  if (self.hasWeavePairingSessionLog) {
    size_ += computeMessageSize(1, self.weavePairingSessionLog);
  }
  size_ += self.unknownFields.serializedSize;
  memoizedSerializedSize = size_;
  return size_;
}
+ (AppLog*) parseFromData:(NSData*) data {
  return (AppLog*)[[[AppLog builder] mergeFromData:data] build];
}
+ (AppLog*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
  return (AppLog*)[[[AppLog builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
}
+ (AppLog*) parseFromInputStream:(NSInputStream*) input {
  return (AppLog*)[[[AppLog builder] mergeFromInputStream:input] build];
}
+ (AppLog*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
  return (AppLog*)[[[AppLog builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
}
+ (AppLog*) parseFromCodedInputStream:(PBCodedInputStream*) input {
  return (AppLog*)[[[AppLog builder] mergeFromCodedInputStream:input] build];
}
+ (AppLog*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
  return (AppLog*)[[[AppLog builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
}
+ (AppLogBuilder*) builder {
  return [[AppLogBuilder alloc] init];
}
+ (AppLogBuilder*) builderWithPrototype:(AppLog*) prototype {
  return [[AppLog builder] mergeFrom:prototype];
}
- (AppLogBuilder*) builder {
  return [AppLog builder];
}
- (AppLogBuilder*) toBuilder {
  return [AppLog builderWithPrototype:self];
}
- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
  if (self.hasWeavePairingSessionLog) {
    [output appendFormat:@"%@%@ {\n", indent, @"weavePairingSessionLog"];
    [self.weavePairingSessionLog writeDescriptionTo:output
                         withIndent:[NSString stringWithFormat:@"%@  ", indent]];
    [output appendFormat:@"%@}\n", indent];
  }
  [self.unknownFields writeDescriptionTo:output withIndent:indent];
}
- (BOOL) isEqual:(id)other {
  if (other == self) {
    return YES;
  }
  if (![other isKindOfClass:[AppLog class]]) {
    return NO;
  }
  AppLog *otherMessage = other;
  return
      self.hasWeavePairingSessionLog == otherMessage.hasWeavePairingSessionLog &&
      (!self.hasWeavePairingSessionLog || [self.weavePairingSessionLog isEqual:otherMessage.weavePairingSessionLog]) &&
      (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
}
- (NSUInteger) hash {
  __block NSUInteger hashCode = 7;
  if (self.hasWeavePairingSessionLog) {
    hashCode = hashCode * 31 + [self.weavePairingSessionLog hash];
  }
  hashCode = hashCode * 31 + [self.unknownFields hash];
  return hashCode;
}
@end

@interface AppLogBuilder()
@property (strong) AppLog* result;
@end

@implementation AppLogBuilder
@synthesize result;
- (id) init {
  if ((self = [super init])) {
    self.result = [[AppLog alloc] init];
  }
  return self;
}
- (PBGeneratedMessage*) internalGetResult {
  return result;
}
- (AppLogBuilder*) clear {
  self.result = [[AppLog alloc] init];
  return self;
}
- (AppLogBuilder*) clone {
  return [AppLog builderWithPrototype:result];
}
- (AppLog*) defaultInstance {
  return [AppLog defaultInstance];
}
- (AppLog*) build {
  [self checkInitialized];
  return [self buildPartial];
}
- (AppLog*) buildPartial {
  AppLog* returnMe = result;
  self.result = nil;
  return returnMe;
}
- (AppLogBuilder*) mergeFrom:(AppLog*) other {
  if (other == [AppLog defaultInstance]) {
    return self;
  }
  if (other.hasWeavePairingSessionLog) {
    [self mergeWeavePairingSessionLog:other.weavePairingSessionLog];
  }
  [self mergeUnknownFields:other.unknownFields];
  return self;
}
- (AppLogBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
  return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
}
- (AppLogBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
  PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
  while (YES) {
    SInt32 tag = [input readTag];
    switch (tag) {
      case 0:
        [self setUnknownFields:[unknownFields build]];
        return self;
      default: {
        if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
          [self setUnknownFields:[unknownFields build]];
          return self;
        }
        break;
      }
      case 10: {
        WeavePairingSessionLogBuilder* subBuilder = [WeavePairingSessionLog builder];
        if (self.hasWeavePairingSessionLog) {
          [subBuilder mergeFrom:self.weavePairingSessionLog];
        }
        [input readMessage:subBuilder extensionRegistry:extensionRegistry];
        [self setWeavePairingSessionLog:[subBuilder buildPartial]];
        break;
      }
    }
  }
}
- (BOOL) hasWeavePairingSessionLog {
  return result.hasWeavePairingSessionLog;
}
- (WeavePairingSessionLog*) weavePairingSessionLog {
  return result.weavePairingSessionLog;
}
- (AppLogBuilder*) setWeavePairingSessionLog:(WeavePairingSessionLog*) value {
  result.hasWeavePairingSessionLog = YES;
  result.weavePairingSessionLog = value;
  return self;
}
- (AppLogBuilder*) setWeavePairingSessionLogBuilder:(WeavePairingSessionLogBuilder*) builderForValue {
  return [self setWeavePairingSessionLog:[builderForValue build]];
}
- (AppLogBuilder*) mergeWeavePairingSessionLog:(WeavePairingSessionLog*) value {
  if (result.hasWeavePairingSessionLog &&
      result.weavePairingSessionLog != [WeavePairingSessionLog defaultInstance]) {
    result.weavePairingSessionLog =
      [[[WeavePairingSessionLog builderWithPrototype:result.weavePairingSessionLog] mergeFrom:value] buildPartial];
  } else {
    result.weavePairingSessionLog = value;
  }
  result.hasWeavePairingSessionLog = YES;
  return self;
}
- (AppLogBuilder*) clearWeavePairingSessionLog {
  result.hasWeavePairingSessionLog = NO;
  result.weavePairingSessionLog = [WeavePairingSessionLog defaultInstance];
  return self;
}
@end


// @@protoc_insertion_point(global_scope)
