1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use {
objects::{RoomPosition, StructurePortal},
traits::TryInto,
};
#[derive(Deserialize, Debug)]
pub struct InterShardPortalDestination {
shard: String,
room: String,
}
js_deserializable!(InterShardPortalDestination);
pub enum PortalDestination {
InterRoom(RoomPosition),
InterShard(InterShardPortalDestination),
}
impl StructurePortal {
pub fn destination(&self) -> PortalDestination {
let v = js! {return @{self.as_ref()}.destination;};
let is_inter_room: bool = js_unwrap!{
@{&v} instanceof RoomPosition
};
if is_inter_room {
PortalDestination::InterRoom(v.try_into().expect(
"The inter room portal destination couldn't be converted to a RoomPosition",
))
} else {
PortalDestination::InterShard(
v.try_into()
.expect("Value couldn't be converted into an InterShardPortalDestination"),
)
}
}
}