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.rs40
1 files changed, 21 insertions, 19 deletions
diff --git a/crates/proc-macro-api/src/legacy_protocol.rs b/crates/proc-macro-api/src/legacy_protocol.rs
index ee96b899fe..22a7d9868e 100644
--- a/crates/proc-macro-api/src/legacy_protocol.rs
+++ b/crates/proc-macro-api/src/legacy_protocol.rs
@@ -1,6 +1,5 @@
//! The initial proc-macro-srv protocol, soon to be deprecated.
-pub mod json;
pub mod msg;
use std::{
@@ -13,15 +12,14 @@ use span::Span;
use crate::{
ProcMacro, ProcMacroKind, ServerError,
- legacy_protocol::{
- json::{read_json, write_json},
- msg::{
- ExpandMacro, ExpandMacroData, ExpnGlobals, FlatTree, Message, Request, Response,
- ServerConfig, SpanDataIndexMap, deserialize_span_data_index_map,
- flat::serialize_span_data_index_map,
- },
+ legacy_protocol::msg::{
+ ExpandMacro, ExpandMacroData, ExpnGlobals, FlatTree, Message, Request, Response,
+ ServerConfig, SpanDataIndexMap, deserialize_span_data_index_map,
+ flat::serialize_span_data_index_map,
},
process::ProcMacroServerProcess,
+ transport::codec::Codec,
+ transport::codec::{json::JsonProtocol, postcard::PostcardProtocol},
version,
};
@@ -79,15 +77,14 @@ pub(crate) fn find_proc_macros(
pub(crate) fn expand(
proc_macro: &ProcMacro,
- subtree: tt::SubtreeView<'_, Span>,
- attr: Option<tt::SubtreeView<'_, Span>>,
+ subtree: tt::SubtreeView<'_>,
+ attr: Option<tt::SubtreeView<'_>>,
env: Vec<(String, String)>,
def_site: Span,
call_site: Span,
mixed_site: Span,
current_dir: String,
-) -> Result<Result<tt::TopSubtree<span::SpanData<span::SyntaxContext>>, String>, crate::ServerError>
-{
+) -> Result<Result<tt::TopSubtree, String>, crate::ServerError> {
let version = proc_macro.process.version();
let mut span_data_table = SpanDataIndexMap::default();
let def_site = span_data_table.insert_full(def_site).0;
@@ -95,9 +92,10 @@ pub(crate) fn expand(
let mixed_site = span_data_table.insert_full(mixed_site).0;
let task = ExpandMacro {
data: ExpandMacroData {
- macro_body: FlatTree::new(subtree, version, &mut span_data_table),
+ macro_body: FlatTree::from_subtree(subtree, version, &mut span_data_table),
macro_name: proc_macro.name.to_string(),
- attributes: attr.map(|subtree| FlatTree::new(subtree, version, &mut span_data_table)),
+ attributes: attr
+ .map(|subtree| FlatTree::from_subtree(subtree, version, &mut span_data_table)),
has_global_spans: ExpnGlobals {
serialize: version >= version::HAS_GLOBAL_SPANS,
def_site,
@@ -150,21 +148,25 @@ fn send_task(srv: &ProcMacroServerProcess, req: Request) -> Result<Response, Ser
return Err(server_error.clone());
}
- srv.send_task(send_request, req)
+ if srv.use_postcard() {
+ srv.send_task::<_, _, PostcardProtocol>(send_request::<PostcardProtocol>, req)
+ } else {
+ srv.send_task::<_, _, JsonProtocol>(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)),
})?;