text: /*
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements. See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership. The ASF licenses this file
   * to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance
   * with the License. You may obtain a copy of the License at
   *
   *   http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing,
   * software distributed under the License is distributed on an
   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   * KIND, either express or implied. See the License for the
   * specific language governing permissions and limitations
   * under the License.
   */
  
  #import <Foundation/Foundation.h>
  #import "ENTException.h"
  
  @protocol ENTTransport;
  
  enum {
    TMessageType_CALL = 1,
    TMessageType_REPLY = 2,
    TMessageType_EXCEPTION = 3,
    TMessageType_ONEWAY = 4
  };
  
  enum {
    TType_STOP   = 0,
    TType_VOID   = 1,
    TType_BOOL   = 2,
    TType_BYTE   = 3,
    TType_DOUBLE = 4,
    TType_I16    = 6,
    TType_I32    = 8,
    TType_I64    = 10,
    TType_STRING = 11,
    TType_STRUCT = 12,
    TType_MAP    = 13,
    TType_SET    = 14,
    TType_LIST   = 15,
    TType_BINARY = 16,
  };
  
  
  @protocol ENTProtocol <NSObject>
  
  - (id <ENTTransport>) transport;
  
  - (void) readMessageBeginReturningName: (NSString **) name
                                    type: (int *) type
                              sequenceID: (int *) sequenceID;
  - (void) readMessageEnd;
  
  - (void) readStructBeginReturningName: (NSString **) name;
  - (void) readStructEnd;
  
  - (void) readFieldBeginReturningName: (NSString **) name
                                  type: (int *) fieldType
                               fieldID: (int *) fieldID;
  - (void) readFieldEnd;
  
  - (NSString *) readString;
  
  - (BOOL) readBool;
  
  - (unsigned char) readByte;
  
  - (short) readI16;
  
  - (int32_t) readI32;
  
  - (int64_t) readI64;
  
  - (double) readDouble;
  
  - (NSData *) readBinary;
  
  - (void) readMapBeginReturningKeyType: (int *) keyType
                              valueType: (int *) valueType
                                   size: (int *) size;
  - (void) readMapEnd;
  
  - (void) readSetBeginReturningElementType: (int *) elementType
                                       size: (int *) size;
  - (void) readSetEnd;
  
  
  - (void) readListBeginReturningElementType: (int *) elementType
                                        size: (int *) size;
  - (void) readListEnd;
  
  - (void) writeMessageBeginWithName: (NSString *) name
                                type: (int) messageType
                          sequenceID: (int) sequenceID;
  - (void) writeMessageEnd;
  
  - (void) writeStructBeginWithName: (NSString *) name;
  - (void) writeStructEnd;
  
  - (void) writeFieldBeginWithName: (NSString *) name
                              type: (int) fieldType
                           fieldID: (int) fieldID;
  
  - (void) writeI32: (int32_t) value;
  
  - (void) writeI64: (int64_t) value;
  
  - (void) writeI16: (short) value;
  
  - (void) writeByte: (uint8_t) value;
  
  - (void) writeString: (NSString *) value;
  
  - (void) writeDouble: (double) value;
  
  - (void) writeBool: (BOOL) value;
  
  - (void) writeBinary: (NSData *) data;
  
  - (void) writeFieldStop;
  
  - (void) writeFieldEnd;
  
  - (void) writeMapBeginWithKeyType: (int) keyType
                          valueType: (int) valueType
                               size: (int) size;
  - (void) writeMapEnd;
  
  - (void) writeSetBeginWithElementType: (int) elementType
                                   size: (int) size;
  - (void) writeSetEnd;
  
  - (void) writeListBeginWithElementType: (int) elementType
                                    size: (int) size;
  
  - (void) writeListEnd;
  
  @end
  
  @interface ENTProtocolException : ENTException
  @end
  
  @interface ENTProtocolUtil : NSObject
  
  + (void) skipType: (int) type onProtocol: (id <ENTProtocol>) protocol;
  
  + (void) readFromProtocol:(id<ENTProtocol>)inProtocol
                 ontoObject:(id)object;
  
  + (id) readMessage:(NSString *)message
        fromProtocol:(id<ENTProtocol>)inProtocol
   withResponseTypes:(NSArray *)responseTypes;
  
  + (void) writeObject:(id)object
          ontoProtocol:(id<ENTProtocol>)outProtocol;
  
  + (void) sendMessage:(NSString *)messageName
            toProtocol:(id<ENTProtocol>)outProtocol
          withArgPairs:(NSArray *)argPairs;
  
  @end
  