1
0

wip: Testing json parser

This commit is contained in:
Ishan Jain 2024-01-02 02:24:05 +05:30
parent 6f8249a683
commit 15167131f9
Signed by: ishan
GPG Key ID: 0506DB2A1CC75C27

View File

@ -1,6 +1,7 @@
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Message { pub struct Message {
pub src: String, pub src: String,
pub dest: String, pub dest: String,
@ -9,17 +10,27 @@ pub struct Message {
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
pub(crate) struct MessageBody { pub(crate) struct MessageBody {
#[serde(rename = "type")] msg_id: Option<i64>,
message_type: String,
msg_id: i64,
in_reply_to: Option<i64>, in_reply_to: Option<i64>,
#[serde(rename = "type")]
message_type: String,
#[serde(flatten)] #[serde(flatten)]
pub message: MessageEnum, pub message_body: MessageEnum,
} }
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
pub enum MessageEnum {} #[serde(untagged, deny_unknown_fields)]
pub enum MessageEnum {
Echo(EchoMessage),
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct EchoMessage {
echo: String,
}
#[cfg(test)] #[cfg(test)]
mod test { mod test {
@ -34,7 +45,8 @@ mod test {
\"body\": { \"body\": {
\"type\": \"echo\", \"type\": \"echo\",
\"msg_id\": 1, \"msg_id\": 1,
\"echo\": \"Please echo 35\" \"echo\": \"Please echo 35\",
\"extraneous\": \"hi\"
} }
}"; }";
@ -44,8 +56,27 @@ mod test {
eprintln!("successfully parsed into Message {:#?}", resp); eprintln!("successfully parsed into Message {:#?}", resp);
} }
eprintln!("{:#?}", resp);
assert!(resp.is_err()); assert!(resp.is_err());
} }
#[test]
pub fn parse_echo() {
let body = "{
\"src\": \"c1\",
\"dest\": \"n1\",
\"body\": {
\"type\": \"echo\",
\"msg_id\": 1,
\"echo\": \"Please echo 35\"
}
}";
let resp: Result<Message, serde_json::Error> = serde_json::from_str(body);
if resp.is_err() {
eprintln!("failed to parsed into Echo Message {:#?}", resp);
}
assert!(resp.is_ok());
}
} }