blob: b8e5afec0d5ae9591a7e55bdec062b46185e13bc [file] [log] [blame]
Mark Slee83c52a82006-06-07 06:51:18 +00001package com.facebook.thrift.protocol;
2
Mark Slee83c52a82006-06-07 06:51:18 +00003import com.facebook.thrift.TException;
4import com.facebook.thrift.transport.TTransport;
5
6/**
7 * Utility class with static methods for interacting with protocol data
8 * streams.
9 *
10 * @author Mark Slee <mcslee@facebook.com>
11 */
12public class TProtocolUtil {
Mark Slee530fd662006-08-09 00:05:18 +000013 public static void skip(TProtocol prot, TTransport in, byte type)
Mark Slee83c52a82006-06-07 06:51:18 +000014 throws TException {
15
16 switch (type) {
Mark Slee530fd662006-08-09 00:05:18 +000017 case TType.BYTE:
Mark Slee83c52a82006-06-07 06:51:18 +000018 {
Mark Slee530fd662006-08-09 00:05:18 +000019 prot.readByte(in);
Mark Slee83c52a82006-06-07 06:51:18 +000020 }
Mark Slee530fd662006-08-09 00:05:18 +000021 case TType.U32:
22 case TType.I32:
Mark Slee83c52a82006-06-07 06:51:18 +000023 {
Mark Slee530fd662006-08-09 00:05:18 +000024 prot.readI32(in);
Mark Slee83c52a82006-06-07 06:51:18 +000025 }
Mark Slee530fd662006-08-09 00:05:18 +000026 case TType.U64:
27 case TType.I64:
Mark Slee83c52a82006-06-07 06:51:18 +000028 {
Mark Slee530fd662006-08-09 00:05:18 +000029 prot.readI64(in);
Mark Slee83c52a82006-06-07 06:51:18 +000030 }
Mark Slee530fd662006-08-09 00:05:18 +000031 case TType.STRING:
Mark Slee83c52a82006-06-07 06:51:18 +000032 {
Mark Slee530fd662006-08-09 00:05:18 +000033 prot.readString(in);
Mark Slee83c52a82006-06-07 06:51:18 +000034 }
Mark Slee530fd662006-08-09 00:05:18 +000035 case TType.STRUCT:
Mark Slee83c52a82006-06-07 06:51:18 +000036 {
Mark Slee530fd662006-08-09 00:05:18 +000037 prot.readStructBegin(in);
Mark Slee83c52a82006-06-07 06:51:18 +000038 while (true) {
Mark Slee530fd662006-08-09 00:05:18 +000039 TField field = prot.readFieldBegin(in);
40 if (field.type == TType.STOP) {
Mark Slee83c52a82006-06-07 06:51:18 +000041 break;
42 }
Mark Slee530fd662006-08-09 00:05:18 +000043 skip(prot, in, field.type);
44 prot.readFieldEnd(in);
Mark Slee83c52a82006-06-07 06:51:18 +000045 }
Mark Slee530fd662006-08-09 00:05:18 +000046 prot.readStructEnd(in);
Mark Slee83c52a82006-06-07 06:51:18 +000047 }
Mark Slee530fd662006-08-09 00:05:18 +000048 case TType.MAP:
Mark Slee83c52a82006-06-07 06:51:18 +000049 {
Mark Slee530fd662006-08-09 00:05:18 +000050 TMap map = prot.readMapBegin(in);
51 for (int i = 0; i < map.size; i++) {
52 skip(prot, in, map.keyType);
53 skip(prot, in, map.valueType);
Mark Slee83c52a82006-06-07 06:51:18 +000054 }
Mark Slee530fd662006-08-09 00:05:18 +000055 prot.readMapEnd(in);
Mark Slee83c52a82006-06-07 06:51:18 +000056 }
Mark Slee530fd662006-08-09 00:05:18 +000057 case TType.SET:
58 {
59 TSet set = prot.readSetBegin(in);
60 for (int i = 0; i < set.size; i++) {
61 skip(prot, in, set.elemType);
Mark Slee83c52a82006-06-07 06:51:18 +000062 }
Mark Slee530fd662006-08-09 00:05:18 +000063 prot.readSetEnd(in);
Mark Slee83c52a82006-06-07 06:51:18 +000064 }
Mark Slee530fd662006-08-09 00:05:18 +000065 case TType.LIST:
Mark Slee83c52a82006-06-07 06:51:18 +000066 {
Mark Slee530fd662006-08-09 00:05:18 +000067 TList list = prot.readListBegin(in);
68 for (int i = 0; i < list.size; i++) {
69 skip(prot, in, list.elemType);
Mark Slee83c52a82006-06-07 06:51:18 +000070 }
Mark Slee530fd662006-08-09 00:05:18 +000071 prot.readListEnd(in);
Mark Slee83c52a82006-06-07 06:51:18 +000072 }
73 default:
Mark Slee530fd662006-08-09 00:05:18 +000074 return;
Mark Slee83c52a82006-06-07 06:51:18 +000075 }
76 }
77}