Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc-macro-api/src/legacy_protocol.rs')
-rw-r--r--crates/proc-macro-api/src/legacy_protocol.rs33
1 files changed, 9 insertions, 24 deletions
diff --git a/crates/proc-macro-api/src/legacy_protocol.rs b/crates/proc-macro-api/src/legacy_protocol.rs
index 6d521d00cd..c2b132ddcc 100644
--- a/crates/proc-macro-api/src/legacy_protocol.rs
+++ b/crates/proc-macro-api/src/legacy_protocol.rs
@@ -14,14 +14,15 @@ use span::Span;
use crate::{
ProcMacro, ProcMacroKind, ServerError,
+ codec::Codec,
legacy_protocol::{
- json::{read_json, write_json},
+ json::JsonProtocol,
msg::{
ExpandMacro, ExpandMacroData, ExpnGlobals, FlatTree, Message, Request, Response,
ServerConfig, SpanDataIndexMap, deserialize_span_data_index_map,
flat::serialize_span_data_index_map,
},
- postcard::{read_postcard, write_postcard},
+ postcard::PostcardProtocol,
},
process::ProcMacroServerProcess,
version,
@@ -154,42 +155,26 @@ fn send_task(srv: &ProcMacroServerProcess, req: Request) -> Result<Response, Ser
}
if srv.use_postcard() {
- srv.send_task(send_request_postcard, req)
+ srv.send_task(send_request::<PostcardProtocol>, req)
} else {
- srv.send_task(send_request, req)
+ srv.send_task(send_request::<JsonProtocol>, req)
}
}
/// Sends a request to the server and reads the response.
-fn send_request(
+fn send_request<P: Codec>(
mut writer: &mut dyn Write,
mut reader: &mut dyn BufRead,
req: Request,
- buf: &mut String,
+ buf: &mut P::Buf,
) -> Result<Option<Response>, ServerError> {
- req.write(write_json, &mut writer).map_err(|err| ServerError {
+ req.write::<_, P>(&mut writer).map_err(|err| ServerError {
message: "failed to write request".into(),
io: Some(Arc::new(err)),
})?;
- let res = Response::read(read_json, &mut reader, buf).map_err(|err| ServerError {
+ let res = Response::read::<_, P>(&mut reader, buf).map_err(|err| ServerError {
message: "failed to read response".into(),
io: Some(Arc::new(err)),
})?;
Ok(res)
}
-
-fn send_request_postcard(
- mut writer: &mut dyn Write,
- mut reader: &mut dyn BufRead,
- req: Request,
- buf: &mut Vec<u8>,
-) -> Result<Option<Response>, ServerError> {
- req.write_postcard(write_postcard, &mut writer).map_err(|err| ServerError {
- message: "failed to write request".into(),
- io: Some(Arc::new(err)),
- })?;
- let res = Response::read_postcard(read_postcard, &mut reader, buf).map_err(|err| {
- ServerError { message: "failed to read response".into(), io: Some(Arc::new(err)) }
- })?;
- Ok(res)
-}