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)