thrift-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "shuo li (Jira)" <j...@apache.org>
Subject [jira] [Commented] (THRIFT-5300) rs compact protocol collection elem type to ttype mapping wrong
Date Tue, 03 Nov 2020 03:31:00 GMT

    [ https://issues.apache.org/jira/browse/THRIFT-5300?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17225116#comment-17225116
] 

shuo li commented on THRIFT-5300:
---------------------------------

{code:java}
#[test] 
fn must_write_small_sized_list_begin() {        
   let (_, mut o_prot) = test_objects();
   assert_success!(o_prot.write_list_begin(&TListIdentifier::new(TType::I64, 4)));
   let expected: [u8; 1] = [0x46 /* size | elem_type */];
   assert_eq_written_bytes!(o_prot, expected);   
}

{code}
[~allengeorge]: You stated that the field type encoded in struct and list are different,
but from the test case in compact protocol, in list, I64 is 0x6, the attachment you provided
says it should be 10(0xA) in list, set and map.

> 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
>            Assignee: Allen George
>            Priority: Major
>         Attachments: Screen Shot 2020-11-02 at 16.31.09.png, Screen Shot 2020-11-02 at
16.31.31.png
>
>
> 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)

Mime
View raw message