in lib/py/src/ext/protocol.tcc [559:640]
bool ProtocolBase<Impl>::skip(TType type) {
switch (type) {
case T_BOOL:
return impl()->skipBool();
case T_I08:
return impl()->skipByte();
case T_I16:
return impl()->skipI16();
case T_I32:
return impl()->skipI32();
case T_I64:
return impl()->skipI64();
case T_DOUBLE:
return impl()->skipDouble();
case T_STRING: {
return impl()->skipString();
}
case T_LIST:
case T_SET: {
TType etype = T_STOP;
int32_t len = impl()->readListBegin(etype);
if (len < 0) {
return false;
}
for (int32_t i = 0; i < len; i++) {
if (!skip(etype)) {
return false;
}
}
return true;
}
case T_MAP: {
TType ktype = T_STOP;
TType vtype = T_STOP;
int32_t len = impl()->readMapBegin(ktype, vtype);
if (len < 0) {
return false;
}
for (int32_t i = 0; i < len; i++) {
if (!skip(ktype) || !skip(vtype)) {
return false;
}
}
return true;
}
case T_STRUCT: {
detail::ReadStructScope<Impl> scope = detail::readStructScope(this);
if (!scope) {
return false;
}
while (true) {
TType type = T_STOP;
int16_t tag;
if (!impl()->readFieldBegin(type, tag)) {
return false;
}
if (type == T_STOP) {
return true;
}
if (!skip(type)) {
return false;
}
}
return true;
}
case T_STOP:
case T_VOID:
case T_UTF16:
case T_UTF8:
case T_U64:
default:
PyErr_Format(PyExc_TypeError, "Unexpected TType for skip: %d", type);
return false;
}
return true;
}