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

shuo li edited comment on THRIFT-5300 at 11/3/20, 3:46 AM:
-----------------------------------------------------------

{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 mentioned 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.


was (Author: shuoli84):
{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)

Reply via email to