fbthrift_transport_response_handler/
lib.rs1use std::io::Error as IoError;
2
3pub 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#[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}