ichen-openprotocol 0.4.0

iChen Open Protocol access library.
Documentation
use ichen_openprotocol::*;
use Message::*;

#[test]
fn integration_test_serialize_to_json() {
    let mut m = Message::new_join(
        "hello",
        Filters::Status + Filters::All + Filters::Cycle + Filters::Operators,
    );
    if let Join { options, .. } = &mut m {
        options.sequence = 999;
    }

    let json = m.to_json_str().unwrap();
    assert_eq!(
        r#"{"$type":"Join","version":"4.0","password":"hello","language":"EN","filter":"All, Operators","sequence":999}"#,
        json
    );
}

#[test]
fn integration_test_deserialize_from_json() {
    let m = Message::parse_from_json_str(
        r#"{"$type":"Join","version":"1.0.0","password":"hello","language":"EN","filter":"Mold, Cycle","sequence":42,"priority":10}"#,
    )
    .unwrap();

    if let Join { version, password, filter, options, .. } = m {
        assert_eq!("1.0.0", version);
        assert_eq!("hello", password);
        assert_eq!(42, options.sequence);
        assert_eq!(10, options.priority);
        assert!(filter.has(Filters::Cycle));
        assert!(filter.has(Filters::Mold));
        assert!(!filter.has(Filters::Alarms));
        assert!(!filter.has(Filters::All));
    } else {
        panic!("Wrong type of message deserialized!");
    }
}