From: Ian Jackson Date: Thu, 25 Mar 2021 12:31:38 +0000 (+0000) Subject: occregion: json-encode it X-Git-Tag: otter-0.5.0~422 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=6a77ba7288bda3ea703b3da06a3debca4872baaa;p=otter.git occregion: json-encode it Signed-off-by: Ian Jackson --- diff --git a/daemon/session.rs b/daemon/session.rs index 2a9d33c4..a6c7b54a 100644 --- a/daemon/session.rs +++ b/daemon/session.rs @@ -49,7 +49,7 @@ struct SessionPieceLoadJson<'r> { desc: Html, uos: &'r [UoDescription], moveable: PieceMoveable, - occregion: Option<&'r Region>, + occregion: Option>, } #[derive(Serialize,Debug)] @@ -132,6 +132,8 @@ fn session_inner(form: Json, let vangle = pri.angle(gpc).to_compass(); let (pos, zlevel) = pri.pos_zlevel(gpc); + let occregion = gpc.occult.active_region(&ig.gs.occults)? + .map(|r| JsonString(r)); let for_info = SessionPieceLoadJson { held: &gpc.held, @@ -142,7 +144,7 @@ fn session_inner(form: Json, desc, moveable: gpc.moveable(), uos: &pri.ui_operations(&ig.gs, gpc, ipc)?, - occregion: gpc.occult.active_region(&ig.gs.occults)?, + occregion, }; let for_piece = SessionPieceContext { diff --git a/src/pcrender.rs b/src/pcrender.rs index 232c39b5..ce196c2c 100644 --- a/src/pcrender.rs +++ b/src/pcrender.rs @@ -116,6 +116,8 @@ impl PieceRenderInstructions { -> PreparedPieceState { let pri = self; let (pos, zlevel) = pri.pos_zlevel(gpc); + let occregion = gpc.occult.active_region(&gs.occults)? + .map(|r| JsonString(r.clone())); let r = PreparedPieceState { pos : pos, held : gpc.held, @@ -126,7 +128,7 @@ impl PieceRenderInstructions { pinned : gpc.pinned, uos : pri.ui_operations(gs, gpc, ipc)?, moveable : gpc.moveable(), - occregion : gpc.occult.active_region(&gs.occults)?.cloned(), + occregion, }; dbgc!(pri, ipc, gpc, r); r diff --git a/src/updates.rs b/src/updates.rs index d909677b..7b7cdba8 100644 --- a/src/updates.rs +++ b/src/updates.rs @@ -107,7 +107,7 @@ pub struct PreparedPieceState { pub pinned: bool, pub moveable: PieceMoveable, pub uos: Vec, - pub occregion: Option, + pub occregion: Option>, } #[derive(Debug,Copy,Clone,Serialize,Deserialize,Eq)] diff --git a/src/utils.rs b/src/utils.rs index afa01209..4cc9404a 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -235,6 +235,17 @@ pub fn toml_merge<'u, } } +#[derive(Debug,Clone)] +pub struct JsonString(pub T); +impl Serialize for JsonString where T:Serialize { + #[throws(S::Error)] + fn serialize(&self, s: S) -> S::Ok where S:Serializer { + let json = serde_json::to_string(&self.0) + .map_err(|e| ::custom(e))?; + Serialize::serialize(&json, s)? + } +} + #[macro_export] macro_rules! deref_to_field { {$({ $($gen:tt)* })? $outer:ty, $inner:ty, $($field:tt)*} => {