blob: ad333bc2a5c6ba1ba18873c3351838ac1b3bcbd7 [file] [log] [blame]
Mark Slee7eb0d632007-03-01 00:00:27 +00001// Copyright (c) 2006- Facebook
2// Distributed under the Thrift Software License
3//
4// See accompanying file LICENSE or visit the Thrift site at:
5// http://developers.facebook.com/thrift/
6
Mark Slee83c52a82006-06-07 06:51:18 +00007package com.facebook.thrift.protocol;
8
Mark Slee83c52a82006-06-07 06:51:18 +00009import com.facebook.thrift.TException;
10import com.facebook.thrift.transport.TTransport;
11
12/**
13 * Utility class with static methods for interacting with protocol data
14 * streams.
15 *
16 * @author Mark Slee <mcslee@facebook.com>
17 */
18public class TProtocolUtil {
Mark Slee456b7a82006-10-25 20:53:37 +000019 public static void skip(TProtocol prot, byte type)
Mark Slee83c52a82006-06-07 06:51:18 +000020 throws TException {
21
22 switch (type) {
Mark Slee78f58e22006-09-02 04:17:07 +000023 case TType.BOOL:
24 {
Mark Slee456b7a82006-10-25 20:53:37 +000025 prot.readBool();
Mark Slee780e4ec2007-10-02 04:43:31 +000026 break;
Mark Slee78f58e22006-09-02 04:17:07 +000027 }
Mark Slee530fd662006-08-09 00:05:18 +000028 case TType.BYTE:
Mark Slee83c52a82006-06-07 06:51:18 +000029 {
Mark Slee456b7a82006-10-25 20:53:37 +000030 prot.readByte();
Mark Slee780e4ec2007-10-02 04:43:31 +000031 break;
Mark Slee83c52a82006-06-07 06:51:18 +000032 }
Mark Slee78f58e22006-09-02 04:17:07 +000033 case TType.I16:
34 {
Mark Slee456b7a82006-10-25 20:53:37 +000035 prot.readI16();
Mark Slee780e4ec2007-10-02 04:43:31 +000036 break;
Mark Slee78f58e22006-09-02 04:17:07 +000037 }
Mark Slee530fd662006-08-09 00:05:18 +000038 case TType.I32:
Mark Slee83c52a82006-06-07 06:51:18 +000039 {
Mark Slee456b7a82006-10-25 20:53:37 +000040 prot.readI32();
Mark Slee780e4ec2007-10-02 04:43:31 +000041 break;
Mark Slee83c52a82006-06-07 06:51:18 +000042 }
Mark Slee530fd662006-08-09 00:05:18 +000043 case TType.I64:
Mark Slee83c52a82006-06-07 06:51:18 +000044 {
Mark Slee456b7a82006-10-25 20:53:37 +000045 prot.readI64();
Mark Slee780e4ec2007-10-02 04:43:31 +000046 break;
Mark Slee83c52a82006-06-07 06:51:18 +000047 }
Mark Sleec98d0502006-09-06 02:42:25 +000048 case TType.DOUBLE:
49 {
Mark Slee456b7a82006-10-25 20:53:37 +000050 prot.readDouble();
Mark Slee780e4ec2007-10-02 04:43:31 +000051 break;
Mark Sleec98d0502006-09-06 02:42:25 +000052 }
Mark Slee530fd662006-08-09 00:05:18 +000053 case TType.STRING:
Mark Slee83c52a82006-06-07 06:51:18 +000054 {
Mark Slee456b7a82006-10-25 20:53:37 +000055 prot.readString();
Mark Slee780e4ec2007-10-02 04:43:31 +000056 break;
Mark Slee83c52a82006-06-07 06:51:18 +000057 }
Mark Slee530fd662006-08-09 00:05:18 +000058 case TType.STRUCT:
Mark Slee83c52a82006-06-07 06:51:18 +000059 {
Mark Slee456b7a82006-10-25 20:53:37 +000060 prot.readStructBegin();
Mark Slee83c52a82006-06-07 06:51:18 +000061 while (true) {
Mark Slee456b7a82006-10-25 20:53:37 +000062 TField field = prot.readFieldBegin();
Mark Slee530fd662006-08-09 00:05:18 +000063 if (field.type == TType.STOP) {
Mark Slee83c52a82006-06-07 06:51:18 +000064 break;
65 }
Mark Slee456b7a82006-10-25 20:53:37 +000066 skip(prot, field.type);
67 prot.readFieldEnd();
Mark Slee83c52a82006-06-07 06:51:18 +000068 }
Mark Slee456b7a82006-10-25 20:53:37 +000069 prot.readStructEnd();
Mark Slee780e4ec2007-10-02 04:43:31 +000070 break;
Mark Slee83c52a82006-06-07 06:51:18 +000071 }
Mark Slee530fd662006-08-09 00:05:18 +000072 case TType.MAP:
Mark Slee83c52a82006-06-07 06:51:18 +000073 {
Mark Slee456b7a82006-10-25 20:53:37 +000074 TMap map = prot.readMapBegin();
Mark Slee530fd662006-08-09 00:05:18 +000075 for (int i = 0; i < map.size; i++) {
Mark Slee456b7a82006-10-25 20:53:37 +000076 skip(prot, map.keyType);
77 skip(prot, map.valueType);
Mark Slee83c52a82006-06-07 06:51:18 +000078 }
Mark Slee456b7a82006-10-25 20:53:37 +000079 prot.readMapEnd();
Mark Slee780e4ec2007-10-02 04:43:31 +000080 break;
Mark Slee83c52a82006-06-07 06:51:18 +000081 }
Mark Slee530fd662006-08-09 00:05:18 +000082 case TType.SET:
83 {
Mark Slee456b7a82006-10-25 20:53:37 +000084 TSet set = prot.readSetBegin();
Mark Slee530fd662006-08-09 00:05:18 +000085 for (int i = 0; i < set.size; i++) {
Mark Slee456b7a82006-10-25 20:53:37 +000086 skip(prot, set.elemType);
Mark Slee83c52a82006-06-07 06:51:18 +000087 }
Mark Slee456b7a82006-10-25 20:53:37 +000088 prot.readSetEnd();
Mark Slee780e4ec2007-10-02 04:43:31 +000089 break;
Mark Slee83c52a82006-06-07 06:51:18 +000090 }
Mark Slee530fd662006-08-09 00:05:18 +000091 case TType.LIST:
Mark Slee83c52a82006-06-07 06:51:18 +000092 {
Mark Slee456b7a82006-10-25 20:53:37 +000093 TList list = prot.readListBegin();
Mark Slee530fd662006-08-09 00:05:18 +000094 for (int i = 0; i < list.size; i++) {
Mark Slee456b7a82006-10-25 20:53:37 +000095 skip(prot, list.elemType);
Mark Slee83c52a82006-06-07 06:51:18 +000096 }
Mark Slee456b7a82006-10-25 20:53:37 +000097 prot.readListEnd();
Mark Slee780e4ec2007-10-02 04:43:31 +000098 break;
Mark Slee83c52a82006-06-07 06:51:18 +000099 }
100 default:
Mark Slee780e4ec2007-10-02 04:43:31 +0000101 break;
Mark Slee83c52a82006-06-07 06:51:18 +0000102 }
103 }
104}