[ https://issues.apache.org/jira/browse/THRIFT-4147?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
James E. King, III resolved THRIFT-4147. ---------------------------------------- Resolution: Fixed Assignee: James E. King, III Fix Version/s: 0.11.0 Committed - thanks! > Rust: protocol should accept transports with non-static lifetime > ---------------------------------------------------------------- > > Key: THRIFT-4147 > URL: https://issues.apache.org/jira/browse/THRIFT-4147 > Project: Thrift > Issue Type: Bug > Components: Rust - Library > Affects Versions: 1.0 > Reporter: Chao Sun > Assignee: James E. King, III > Fix For: 0.11.0 > > > Currently for Rust language support, all protocols only accept > {{TTransport}}s with static lifetime. For instance: > {code} > impl TCompactInputProtocol { > /// Create a `TCompactInputProtocol` that reads bytes from `transport`. > pub fn new(transport: Rc<RefCell<Box<TTransport>>>) -> > TCompactInputProtocol { > TCompactInputProtocol { > last_read_field_id: 0, > read_field_id_stack: Vec::new(), > pending_read_bool_value: None, > transport: transport, > } > } > ... > {code} > This poses an issue when user has the following custom defined TTransport: > {code} > // A read buffer piggy-backed on T: Read. Write is not supported. > pub struct ReadBuffer<'a, T> where T: 'a + Read { > data: &'a mut T > } > impl<'a, T: 'a + Read> ReadBuffer<'a, T> { > pub fn new(data: &'a mut T) -> Self { Self { data: data } } > } > impl<'a, T: 'a + Read> Read for ReadBuffer<'a, T> { > fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> { > let bytes_read = self.data.read(buf)?; > Ok(bytes_read) > } > } > ... > {code} > It's better to change the protocols to accept {{Rc<RefCell<Box<TTransport + > 'a>>>}} -- This message was sent by Atlassian JIRA (v6.3.15#6346)