Skip to main content

trim/
trim.rs

1use bullet_exchange_interface::schema::{Schema, SchemaFile, trim};
2use bullet_exchange_interface::transaction::Transaction;
3
4fn main() {
5    let filter_variants = |name: &str, variant: &str| match name {
6        "Transaction" => variant == "V0",
7        "RuntimeCall" => matches!(variant, "Exchange" | "Bank"),
8        "CallMessage" => matches!(variant, "Keeper" | "TransferWithMemo"),
9        "KeeperAction" => matches!(
10            variant,
11            "UpdateOraclePrices" | "UpdateMarkPrices" | "UpdateOraclePricesWithPythProofs"
12        ),
13        "UniquenessData" => variant == "Generation",
14        _ => panic!("'{name}::{variant}' is unknown"),
15    };
16
17    let our_schema = Schema::of_single_type::<Transaction>().unwrap();
18    let remote: SchemaFile = serde_json::from_str(include_str!("schema.json")).unwrap();
19
20    let left = trim(&our_schema, &filter_variants);
21    let right = trim(&remote.schema, &filter_variants);
22
23    let left = serde_json::to_string_pretty(&left).unwrap();
24    let right = serde_json::to_string_pretty(&right).unwrap();
25    let mut faults = 0usize;
26    for (l, r) in left.lines().zip(right.lines()) {
27        if l != r {
28            faults = faults.saturating_add(1);
29            println!("< {r}");
30            println!("> {l}");
31            if faults >= 10 {
32                break;
33            }
34        } else {
35            println!("  {l}");
36        }
37    }
38    assert_eq!(left, right);
39}