matching_engine/formatters/
json_formatter.rs1use serde_json::{from_str, to_string, Value};
2
3use crate::formatters::formatter::Formatter;
4use crate::model::domain::{Fill, OrderSingle};
5
6pub struct JsonFormatter {}
10
11impl JsonFormatter {
12 pub fn is_valid_json(val: &str) -> bool {
13 match from_str::<Value>(val) {
14 Ok(_) => true,
15 Err(_) => false,
16 }
17 }
18}
19
20impl Formatter<Fill> for JsonFormatter {
21 fn format_to(fill: Fill) -> String {
22 to_string(&fill).expect("Error serializing fill")
23 }
24
25 fn format_from(data: String) -> Fill {
26 from_str(&data).unwrap()
27 }
28}
29
30impl Formatter<OrderSingle> for JsonFormatter {
31 fn format_to(order: OrderSingle) -> String {
32 to_string(&order).expect("Error serializing order")
33 }
34 fn format_from(data: String) -> OrderSingle {
35 from_str(&data).unwrap()
36 }
37}
38
39#[cfg(test)]
40mod tests {
41 use serde_json::to_string;
42
43 use crate::formatters::formatter::Formatter;
44 use crate::formatters::json_formatter::JsonFormatter;
45 use crate::model::domain::Fill;
46 use crate::utils::create_order_from_string;
47
48 #[test]
49 fn test_serialize_fill_and_order() {
50 let order = create_order_from_string("id1 IBM 20 601.5 Buy".to_string());
51 let string_val = to_string(&order).unwrap();
52 println!("{string_val}");
53 assert!(JsonFormatter::is_valid_json(&string_val));
54 let fill = Fill::from(&order);
55 let string_val = JsonFormatter::format_to(fill);
56 println!("{string_val}");
57 assert!(JsonFormatter::is_valid_json(&string_val))
58 }
59}