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

Yuxuan Wang commented on THRIFT-5300:
-------------------------------------

I took a reading on the go, java and cpp code on the current master. In all 3, 
they have a getCompactType to map from the ids defined in the lists and sets 
section, into the ids defined in the struct encoding section. The thing is, in 
all 3, even in writeListBegin/writeSetBegin/writeMapBegin, they still call 
getCompactType to get the id to be written. So if I read the code correctly, in 
go, java and cpp implementations they all use the ids defined in the struct 
encoding section for list/set/map writing.

> 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