38 lines
1.0 KiB
Rust
38 lines
1.0 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::cursor::CursorPositions;
|
|
use crate::ufa::AppMeta;
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
#[serde(tag = "type", rename_all = "camelCase")]
|
|
pub enum LiveData {
|
|
Cursor { positions: CursorPositions },
|
|
ForegroundApp { meta: AppMeta },
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use crate::cursor::{CursorPosition, CursorPositions};
|
|
|
|
#[test]
|
|
fn live_data_is_internally_tagged_for_client_side_dispatch() {
|
|
let payload = serde_json::to_string(&LiveData::Cursor {
|
|
positions: CursorPositions {
|
|
raw: CursorPosition { x: 120.0, y: 80.0 },
|
|
mapped: CursorPosition { x: 0.25, y: 0.5 },
|
|
},
|
|
})
|
|
.unwrap();
|
|
|
|
assert_eq!(
|
|
payload,
|
|
r#"{"type":"cursor","positions":{"raw":{"x":120.0,"y":80.0},"mapped":{"x":0.25,"y":0.5}}}"#
|
|
);
|
|
assert!(matches!(
|
|
serde_json::from_str(&payload).unwrap(),
|
|
LiveData::Cursor { .. }
|
|
));
|
|
}
|
|
}
|