in parquet/src/format.rs [1860:1998]
fn read_from_in_protocol<T: TInputProtocol>(i_prot: &mut T) -> thrift::Result<LogicalType> {
let mut ret: Option<LogicalType> = None;
let mut received_field_count = 0;
i_prot.read_struct_begin()?;
loop {
let field_ident = i_prot.read_field_begin()?;
if field_ident.field_type == TType::Stop {
break;
}
let field_id = field_id(&field_ident)?;
match field_id {
1 => {
let val = StringType::read_from_in_protocol(i_prot)?;
if ret.is_none() {
ret = Some(LogicalType::STRING(val));
}
received_field_count += 1;
},
2 => {
let val = MapType::read_from_in_protocol(i_prot)?;
if ret.is_none() {
ret = Some(LogicalType::MAP(val));
}
received_field_count += 1;
},
3 => {
let val = ListType::read_from_in_protocol(i_prot)?;
if ret.is_none() {
ret = Some(LogicalType::LIST(val));
}
received_field_count += 1;
},
4 => {
let val = EnumType::read_from_in_protocol(i_prot)?;
if ret.is_none() {
ret = Some(LogicalType::ENUM(val));
}
received_field_count += 1;
},
5 => {
let val = DecimalType::read_from_in_protocol(i_prot)?;
if ret.is_none() {
ret = Some(LogicalType::DECIMAL(val));
}
received_field_count += 1;
},
6 => {
let val = DateType::read_from_in_protocol(i_prot)?;
if ret.is_none() {
ret = Some(LogicalType::DATE(val));
}
received_field_count += 1;
},
7 => {
let val = TimeType::read_from_in_protocol(i_prot)?;
if ret.is_none() {
ret = Some(LogicalType::TIME(val));
}
received_field_count += 1;
},
8 => {
let val = TimestampType::read_from_in_protocol(i_prot)?;
if ret.is_none() {
ret = Some(LogicalType::TIMESTAMP(val));
}
received_field_count += 1;
},
10 => {
let val = IntType::read_from_in_protocol(i_prot)?;
if ret.is_none() {
ret = Some(LogicalType::INTEGER(val));
}
received_field_count += 1;
},
11 => {
let val = NullType::read_from_in_protocol(i_prot)?;
if ret.is_none() {
ret = Some(LogicalType::UNKNOWN(val));
}
received_field_count += 1;
},
12 => {
let val = JsonType::read_from_in_protocol(i_prot)?;
if ret.is_none() {
ret = Some(LogicalType::JSON(val));
}
received_field_count += 1;
},
13 => {
let val = BsonType::read_from_in_protocol(i_prot)?;
if ret.is_none() {
ret = Some(LogicalType::BSON(val));
}
received_field_count += 1;
},
14 => {
let val = UUIDType::read_from_in_protocol(i_prot)?;
if ret.is_none() {
ret = Some(LogicalType::UUID(val));
}
received_field_count += 1;
},
15 => {
let val = Float16Type::read_from_in_protocol(i_prot)?;
if ret.is_none() {
ret = Some(LogicalType::FLOAT16(val));
}
received_field_count += 1;
},
_ => {
i_prot.skip(field_ident.field_type)?;
received_field_count += 1;
},
};
i_prot.read_field_end()?;
}
i_prot.read_struct_end()?;
if received_field_count == 0 {
Err(
thrift::Error::Protocol(
ProtocolError::new(
ProtocolErrorKind::InvalidData,
"received empty union from remote LogicalType"
)
)
)
} else if received_field_count > 1 {
Err(
thrift::Error::Protocol(
ProtocolError::new(
ProtocolErrorKind::InvalidData,
"received multiple fields for union from remote LogicalType"
)
)
)
} else {
ret.ok_or_else(|| thrift::Error::Protocol(ProtocolError::new(ProtocolErrorKind::InvalidData, "return value should have been constructed")))
}
}