salish 0.1.0-dev.1

Messaging Library
Documentation
use crate::{
    message::Message,
    traits::{internal::SalishMessageInternal as _, Payload},
};

#[allow(unused)]
#[derive(Debug)]
enum PayloadA {
    Foo(u64),
    Bar,
}

impl Payload for PayloadA {}

impl<'b> From<&'b Message> for &'b PayloadA {
    fn from(value: &'b Message) -> Self {
        value.inner::<PayloadA>().unwrap()
    }
}

#[allow(unused)]
#[derive(Debug)]
enum PayloadB {
    Baz(u64),
    Foof,
}

impl Payload for PayloadB {}

impl<'b> From<&'b Message> for &'b PayloadB {
    fn from(value: &'b Message) -> Self {
        value.inner::<PayloadB>().unwrap()
    }
}

#[test]
fn simple() {
    let msga = Message::new(PayloadA::Foo(123456));
    let msgb = Message::new(PayloadB::Baz(5678));

    assert!(msga.is_type::<PayloadA>());
    assert!(msgb.is_type::<PayloadB>());

    let a = msga.inner::<PayloadA>().unwrap();
    if let PayloadA::Foo(val) = a {
        assert_eq!(*val, 123456)
    }

    let b = msgb.inner::<PayloadB>().unwrap();
    if let PayloadB::Baz(val) = b {
        assert_eq!(*val, 5678)
    }
}

#[test]
fn into_ref() {
    let msg = Message::new(PayloadA::Foo(123456));
    let a: &PayloadA = (&msg).into();
    if let PayloadA::Foo(val) = a {
        assert_eq!(*val, 123456)
    }
}