Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc-macro-api/src/bidirectional_protocol/msg.rs')
| -rw-r--r-- | crates/proc-macro-api/src/bidirectional_protocol/msg.rs | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/crates/proc-macro-api/src/bidirectional_protocol/msg.rs b/crates/proc-macro-api/src/bidirectional_protocol/msg.rs index d030498e59..1df0c68379 100644 --- a/crates/proc-macro-api/src/bidirectional_protocol/msg.rs +++ b/crates/proc-macro-api/src/bidirectional_protocol/msg.rs @@ -1,6 +1,9 @@ //! Bidirectional protocol messages -use std::ops::Range; +use std::{ + io::{self, BufRead, Write}, + ops::Range, +}; use paths::Utf8PathBuf; use serde::{Deserialize, Serialize}; @@ -8,6 +11,7 @@ use serde::{Deserialize, Serialize}; use crate::{ ProcMacroKind, legacy_protocol::msg::{FlatTree, Message, PanicMessage, ServerConfig}, + transport::postcard, }; #[derive(Debug, Serialize, Deserialize)] @@ -97,4 +101,17 @@ pub struct ExpnGlobals { pub mixed_site: usize, } -impl Message for BidirectionalMessage {} +impl Message for BidirectionalMessage { + type Buf = Vec<u8>; + + fn read(inp: &mut dyn BufRead, buf: &mut Self::Buf) -> io::Result<Option<Self>> { + Ok(match postcard::read(inp, buf)? { + None => None, + Some(buf) => Some(postcard::decode(buf)?), + }) + } + fn write(self, out: &mut dyn Write) -> io::Result<()> { + let value = postcard::encode(&self)?; + postcard::write(out, &value) + } +} |