Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc-macro-srv-cli/tests/common/utils.rs')
| -rw-r--r-- | crates/proc-macro-srv-cli/tests/common/utils.rs | 118 |
1 files changed, 25 insertions, 93 deletions
diff --git a/crates/proc-macro-srv-cli/tests/common/utils.rs b/crates/proc-macro-srv-cli/tests/common/utils.rs index 63b3a74aa4..85c394734b 100644 --- a/crates/proc-macro-srv-cli/tests/common/utils.rs +++ b/crates/proc-macro-srv-cli/tests/common/utils.rs @@ -198,21 +198,22 @@ trait TestProtocol { type Request; type Response; - fn send(&self, writer: &mut dyn Write, req: Self::Request); - fn drive(&self, reader: &mut dyn BufRead, writer: &mut dyn Write) -> Self::Response; + fn request(&self, writer: &mut dyn Write, req: Self::Request); + fn receive(&self, reader: &mut dyn BufRead, writer: &mut dyn Write) -> Self::Response; } +#[allow(dead_code)] struct JsonLegacy; impl TestProtocol for JsonLegacy { type Request = Request; type Response = Response; - fn send(&self, writer: &mut dyn Write, req: Request) { + fn request(&self, writer: &mut dyn Write, req: Request) { req.write::<JsonProtocol>(writer).expect("failed to write request"); } - fn drive(&self, reader: &mut dyn BufRead, _writer: &mut dyn Write) -> Response { + fn receive(&self, reader: &mut dyn BufRead, _writer: &mut dyn Write) -> Response { let mut buf = String::new(); Response::read::<JsonProtocol>(reader, &mut buf) .expect("failed to read response") @@ -220,6 +221,7 @@ impl TestProtocol for JsonLegacy { } } +#[allow(dead_code)] struct PostcardBidirectional<F> where F: Fn(SubRequest) -> Result<SubResponse, ServerError>, @@ -234,12 +236,12 @@ where type Request = BiRequest; type Response = BiResponse; - fn send(&self, writer: &mut dyn Write, req: BiRequest) { + fn request(&self, writer: &mut dyn Write, req: BiRequest) { let msg = BidirectionalMessage::Request(req); msg.write::<PostcardProtocol>(writer).expect("failed to write request"); } - fn drive(&self, reader: &mut dyn BufRead, writer: &mut dyn Write) -> BiResponse { + fn receive(&self, reader: &mut dyn BufRead, writer: &mut dyn Write) -> BiResponse { let mut buf = Vec::new(); loop { @@ -260,98 +262,28 @@ where } } -pub(crate) fn request( +#[allow(dead_code)] +pub(crate) fn request_legacy( writer: &mut dyn Write, reader: &mut dyn BufRead, - request: impl Into<AutoRequest>, - callback: Option<&dyn Fn(SubRequest) -> Result<SubResponse, ServerError>>, -) -> AutoResponse { - let protocol = match callback { - None => AutoProtocol::Legacy(JsonLegacy), - Some(cb) => AutoProtocol::Bidirectional(PostcardBidirectional { callback: cb }), - }; - - protocol.send(writer, request.into()); - protocol.drive(reader, writer) -} - -enum AutoProtocol<F> -where - F: Fn(SubRequest) -> Result<SubResponse, ServerError>, -{ - Legacy(JsonLegacy), - Bidirectional(PostcardBidirectional<F>), + request: Request, +) -> Response { + let protocol = JsonLegacy; + protocol.request(writer, request); + protocol.receive(reader, writer) } -impl<F> TestProtocol for AutoProtocol<F> +#[allow(dead_code)] +pub(crate) fn request_bidirectional<F>( + writer: &mut dyn Write, + reader: &mut dyn BufRead, + request: BiRequest, + callback: F, +) -> BiResponse where F: Fn(SubRequest) -> Result<SubResponse, ServerError>, { - type Request = AutoRequest; - type Response = AutoResponse; - - fn send(&self, writer: &mut dyn Write, req: AutoRequest) { - match (self, req) { - (AutoProtocol::Legacy(p), AutoRequest::Legacy(r)) => { - p.send(writer, r); - } - (AutoProtocol::Bidirectional(p), AutoRequest::Bidirectional(r)) => { - p.send(writer, r); - } - (AutoProtocol::Legacy(_), AutoRequest::Bidirectional(_)) => { - panic!("bidirectional request used with legacy protocol"); - } - (AutoProtocol::Bidirectional(_), AutoRequest::Legacy(_)) => { - panic!("legacy request used with bidirectional protocol"); - } - } - } - - fn drive(&self, reader: &mut dyn BufRead, writer: &mut dyn Write) -> AutoResponse { - match self { - AutoProtocol::Legacy(p) => AutoResponse::Legacy(p.drive(reader, writer)), - AutoProtocol::Bidirectional(p) => AutoResponse::Bidirectional(p.drive(reader, writer)), - } - } -} - -pub(crate) enum AutoRequest { - Legacy(Request), - Bidirectional(BiRequest), -} - -#[derive(Debug)] -pub(crate) enum AutoResponse { - Legacy(Response), - Bidirectional(BiResponse), -} - -impl From<Request> for AutoRequest { - fn from(req: Request) -> AutoRequest { - AutoRequest::Legacy(req) - } -} - -impl From<BiRequest> for AutoRequest { - fn from(req: BiRequest) -> AutoRequest { - AutoRequest::Bidirectional(req) - } -} - -impl From<AutoResponse> for Response { - fn from(res: AutoResponse) -> Response { - match res { - AutoResponse::Legacy(res) => res, - _ => panic!("Should be legacy response"), - } - } -} - -impl From<AutoResponse> for BiResponse { - fn from(res: AutoResponse) -> BiResponse { - match res { - AutoResponse::Bidirectional(res) => res, - _ => panic!("Should be bidirectional response"), - } - } + let protocol = PostcardBidirectional { callback }; + protocol.request(writer, request); + protocol.receive(reader, writer) } |