web-message 0.0.2

A macro that converts Rust structs to/from JavaScript objects via postMessage.
Documentation
pub use web_message_derive::Message;

#[cfg(test)]
mod test {
	use web_sys::js_sys::{Array, ArrayBuffer};

	use crate::Message;

	#[test]
	fn enum_msg() {
		#[derive(Message, Clone, Debug, PartialEq, Eq)]
		struct Config {
			width: u32,
			height: u32,
		}

		#[derive(Message, Clone, Debug, PartialEq, Eq)]
		enum Command {
			Connect { url: String },
			Frame { name: Option<String>, payload: ArrayBuffer },
			Config(Config),
			Close,
			Dimensions(u32, u64),
		}

		let command = Command::Frame {
			name: Some("test".to_string()),
			payload: ArrayBuffer::new(100),
		};

		let mut transferable = Array::new();
		let obj = command.clone().into_message(&mut transferable);
		let out = Command::from_message(obj).unwrap();

		assert_eq!(command, out);
		assert_eq!(transferable.length(), 1);
	}

	#[test]
	fn struct_msg() {
		#[derive(Message, Clone, Debug, PartialEq, Eq)]
		struct Event {
			payload: ArrayBuffer,
			width: u64,
			name: String,
		}

		let event = Event {
			payload: ArrayBuffer::new(100),
			width: 100,
			name: "test".to_string(),
		};

		let mut transferable = Array::new();
		let obj = event.clone().into_message(&mut transferable);
		let out = Event::from_message(obj).unwrap();

		assert_eq!(event, out);
		assert_eq!(transferable, [event.payload].iter().collect());
	}
}