You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "shuo li (Jira)" <ji...@apache.org> on 2020/10/28 07:03:00 UTC
[jira] [Created] (THRIFT-5300) rs compact protocol collection elem
type to ttype mapping wrong
shuo li created THRIFT-5300:
-------------------------------
Summary: rs compact protocol collection elem type to ttype mapping wrong
Key: THRIFT-5300
URL: https://issues.apache.org/jira/browse/THRIFT-5300
Project: Thrift
Issue Type: Bug
Components: Rust - Library
Affects Versions: 0.13.0
Reporter: shuo li
collection_u8_to_type only overrides bool, but in spec, other types are different too.
In field:
* {{BOOLEAN_TRUE}}, encoded as {{1}}
* {{BOOLEAN_FALSE}}, encoded as {{2}}
* {{BYTE}}, encoded as {{3}}
* {color:#FF0000}{{I16}}, encoded as {{4}}{color}
* {color:#FF0000}{{I32}}, encoded as {{5}}{color}
* {{I64}}, encoded as {{6}}
* {{DOUBLE}}, encoded as {{7}}
* {{BINARY}}, used for binary and string fields, encoded as {{8}}
* {{LIST}}, encoded as {{9}}
* {{SET}}, encoded as {{10}}
* {{MAP}}, encoded as {{11}}
* {{STRUCT}}, used for both structs and union fields, encoded as {{12}}
In colleciton:
* {{BOOL}}, encoded as {{2}}
* {{BYTE}}, encoded as {{3}}
* {{DOUBLE}}, encoded as {{4}}
* {color:#FF0000}{{I16}}, encoded as {{6}}{color}
* {color:#FF0000}{{I32}}, encoded as {{8}}{color}
* {{I64}}, encoded as {{10}}
* {{STRING}}, used for binary and string fields, encoded as {{11}}
* {{STRUCT}}, used for structs and union fields, encoded as {{12}}
* {{MAP}}, encoded as {{13}}
* {{SET}}, encoded as {{14}}
* {{LIST}}, encoded as {{15}}
{code:java}
// code placeholder
fn collection_u8_to_type(b: u8) -> crate::Result<TType> {
match b {
0x01 => Ok(TType::Bool),
o => u8_to_type(o),
}
}
fn u8_to_type(b: u8) -> crate::Result<TType> {
match b {
0x00 => Ok(TType::Stop),
0x03 => Ok(TType::I08), // equivalent to TType::Byte
0x04 => Ok(TType::I16),
0x05 => Ok(TType::I32),
0x06 => Ok(TType::I64),
0x07 => Ok(TType::Double),
0x08 => Ok(TType::String),
0x09 => Ok(TType::List),
0x0A => Ok(TType::Set),
0x0B => Ok(TType::Map),
0x0C => Ok(TType::Struct),
unkn => Err(crate::Error::Protocol(crate::ProtocolError { kind: crate::ProtocolErrorKind::InvalidData, message: format!("cannot convert {} into TType", unkn),
})),
}}
{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)