desc: Html,
uos: &'r [UoDescription],
moveable: PieceMoveable,
- occregion: Option<&'r Region>,
+ occregion: Option<JsonString<&'r Region>>,
}
#[derive(Serialize,Debug)]
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,
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 {
-> 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,
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
pub pinned: bool,
pub moveable: PieceMoveable,
pub uos: Vec<UoDescription>,
- pub occregion: Option<Region>,
+ pub occregion: Option<JsonString<Region>>,
}
#[derive(Debug,Copy,Clone,Serialize,Deserialize,Eq)]
}
}
+#[derive(Debug,Clone)]
+pub struct JsonString<T:Serialize>(pub T);
+impl<T> Serialize for JsonString<T> where T:Serialize {
+ #[throws(S::Error)]
+ fn serialize<S>(&self, s: S) -> S::Ok where S:Serializer {
+ let json = serde_json::to_string(&self.0)
+ .map_err(|e| <S::Error as serde::ser::Error>::custom(e))?;
+ Serialize::serialize(&json, s)?
+ }
+}
+
#[macro_export]
macro_rules! deref_to_field {
{$({ $($gen:tt)* })? $outer:ty, $inner:ty, $($field:tt)*} => {