fn read_from_in_protocol()

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")))
    }
  }