fbthrift_transport_response_handler/
lib.rs

1use std::io::Error as IoError;
2
3//
4pub trait ResponseHandler: Clone {
5    fn name(&self) -> Option<&str> {
6        None
7    }
8
9    fn try_make_static_response_bytes(
10        &mut self,
11        service_name: &'static [u8],
12        fn_name: &'static [u8],
13        request_bytes: &[u8],
14    ) -> Result<Option<Vec<u8>>, IoError>;
15
16    fn parse_response_bytes(&mut self, response_bytes: &[u8]) -> Result<Option<usize>, IoError>;
17}
18
19//
20#[derive(Debug, Clone, Copy)]
21pub struct MockResponseHandler;
22
23impl ResponseHandler for MockResponseHandler {
24    fn name(&self) -> Option<&str> {
25        Some("Mock")
26    }
27
28    fn try_make_static_response_bytes(
29        &mut self,
30        _service_name: &'static [u8],
31        _fn_name: &'static [u8],
32        _request_bytes: &[u8],
33    ) -> Result<Option<Vec<u8>>, IoError> {
34        Ok(None)
35    }
36
37    fn parse_response_bytes(&mut self, response_bytes: &[u8]) -> Result<Option<usize>, IoError> {
38        Ok(Some(response_bytes.len()))
39    }
40}
41
42#[cfg(test)]
43mod tests {
44    use super::*;
45
46    #[test]
47    fn test_mock_response_handler() -> Result<(), Box<dyn std::error::Error>> {
48        let mut h = MockResponseHandler;
49
50        assert_eq!(
51            h.try_make_static_response_bytes(b"my_service", b"my_fn", &b""[..])?,
52            None
53        );
54
55        assert_eq!(h.parse_response_bytes(&b"foo"[..])?, Some(3));
56
57        Ok(())
58    }
59}