func Skip()

in lib/go/thrift/protocol.go [94:188]


func Skip(ctx context.Context, self TProtocol, fieldType TType, maxDepth int) (err error) {

	if maxDepth <= 0 {
		return NewTProtocolExceptionWithType(DEPTH_LIMIT, errors.New("Depth limit exceeded"))
	}

	switch fieldType {
	case BOOL:
		_, err = self.ReadBool(ctx)
		return
	case BYTE:
		_, err = self.ReadByte(ctx)
		return
	case I16:
		_, err = self.ReadI16(ctx)
		return
	case I32:
		_, err = self.ReadI32(ctx)
		return
	case I64:
		_, err = self.ReadI64(ctx)
		return
	case DOUBLE:
		_, err = self.ReadDouble(ctx)
		return
	case STRING:
		_, err = self.ReadString(ctx)
		return
	case UUID:
		_, err = self.ReadUUID(ctx)
		return
	case STRUCT:
		if _, err = self.ReadStructBegin(ctx); err != nil {
			return err
		}
		for {
			_, typeId, _, err := self.ReadFieldBegin(ctx)
			if err != nil {
				return err
			}
			if typeId == STOP {
				break
			}
			err = Skip(ctx, self, typeId, maxDepth-1)
			if err != nil {
				return err
			}
			self.ReadFieldEnd(ctx)
		}
		return self.ReadStructEnd(ctx)
	case MAP:
		keyType, valueType, size, err := self.ReadMapBegin(ctx)
		if err != nil {
			return err
		}
		for range size {
			err := Skip(ctx, self, keyType, maxDepth-1)
			if err != nil {
				return err
			}

			err = Skip(ctx, self, valueType, maxDepth-1)
			if err != nil {
				return err
			}
		}
		return self.ReadMapEnd(ctx)
	case SET:
		elemType, size, err := self.ReadSetBegin(ctx)
		if err != nil {
			return err
		}
		for range size {
			err := Skip(ctx, self, elemType, maxDepth-1)
			if err != nil {
				return err
			}
		}
		return self.ReadSetEnd(ctx)
	case LIST:
		elemType, size, err := self.ReadListBegin(ctx)
		if err != nil {
			return err
		}
		for range size {
			err := Skip(ctx, self, elemType, maxDepth-1)
			if err != nil {
				return err
			}
		}
		return self.ReadListEnd(ctx)
	default:
		return NewTProtocolExceptionWithType(INVALID_DATA, fmt.Errorf("Unknown data type %d", fieldType))
	}
}