Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc-macro-api/src/legacy_protocol/msg.rs')
-rw-r--r--crates/proc-macro-api/src/legacy_protocol/msg.rs38
1 files changed, 29 insertions, 9 deletions
diff --git a/crates/proc-macro-api/src/legacy_protocol/msg.rs b/crates/proc-macro-api/src/legacy_protocol/msg.rs
index 1b65906933..bb0dde4728 100644
--- a/crates/proc-macro-api/src/legacy_protocol/msg.rs
+++ b/crates/proc-macro-api/src/legacy_protocol/msg.rs
@@ -8,7 +8,7 @@ use paths::Utf8PathBuf;
use serde::de::DeserializeOwned;
use serde_derive::{Deserialize, Serialize};
-use crate::{Codec, ProcMacroKind};
+use crate::{ProcMacroKind, transport::json};
/// Represents requests sent from the client to the proc-macro-srv.
#[derive(Debug, Serialize, Deserialize)]
@@ -155,20 +155,40 @@ impl ExpnGlobals {
}
pub trait Message: serde::Serialize + DeserializeOwned {
- fn read<C: Codec>(inp: &mut dyn BufRead, buf: &mut C::Buf) -> io::Result<Option<Self>> {
- Ok(match C::read(inp, buf)? {
+ type Buf;
+ fn read(inp: &mut dyn BufRead, buf: &mut Self::Buf) -> io::Result<Option<Self>>;
+ fn write(self, out: &mut dyn Write) -> io::Result<()>;
+}
+
+impl Message for Request {
+ type Buf = String;
+
+ fn read(inp: &mut dyn BufRead, buf: &mut Self::Buf) -> io::Result<Option<Self>> {
+ Ok(match json::read(inp, buf)? {
None => None,
- Some(buf) => Some(C::decode(buf)?),
+ Some(buf) => Some(json::decode(buf)?),
})
}
- fn write<C: Codec>(self, out: &mut dyn Write) -> io::Result<()> {
- let value = C::encode(&self)?;
- C::write(out, &value)
+ fn write(self, out: &mut dyn Write) -> io::Result<()> {
+ let value = json::encode(&self)?;
+ json::write(out, &value)
}
}
-impl Message for Request {}
-impl Message for Response {}
+impl Message for Response {
+ type Buf = String;
+
+ fn read(inp: &mut dyn BufRead, buf: &mut Self::Buf) -> io::Result<Option<Self>> {
+ Ok(match json::read(inp, buf)? {
+ None => None,
+ Some(buf) => Some(json::decode(buf)?),
+ })
+ }
+ fn write(self, out: &mut dyn Write) -> io::Result<()> {
+ let value = json::encode(&self)?;
+ json::write(out, &value)
+ }
+}
#[cfg(test)]
mod tests {