Fix deep syntax tree bug generated by proc-macro

This commit is contained in:
Edwin Cheng 2021-01-01 15:09:27 +08:00
parent a9814fa9c0
commit a65025604d
4 changed files with 46 additions and 4 deletions

View file

@ -58,7 +58,14 @@ pub trait Message: Serialize + DeserializeOwned {
fn read(inp: &mut impl BufRead) -> io::Result<Option<Self>> {
Ok(match read_json(inp)? {
None => None,
Some(text) => Some(serde_json::from_str(&text)?),
Some(text) => {
let mut deserializer = serde_json::Deserializer::from_str(&text);
// Note that some proc-macro generate very deep syntax tree
// We have to disable the current limit of serde here
deserializer.disable_recursion_limit();
let deserializer = serde_stacker::Deserializer::new(&mut deserializer);
Some(Self::deserialize(deserializer)?)
}
})
}
fn write(self, out: &mut impl Write) -> io::Result<()> {