misty_vm/client/
traits.rs

1use crate::{
2    client::{MistyClientHandle, MistyReadonlyClientHandle},
3    controllers::MistyControllerContext,
4};
5
6pub trait AsMistyClientHandle<'a>: Copy {
7    fn handle(self) -> MistyClientHandle<'a>;
8}
9
10impl<'a> AsMistyClientHandle<'a> for MistyClientHandle<'a> {
11    fn handle(self) -> MistyClientHandle<'a> {
12        self
13    }
14}
15
16impl<'a> AsMistyClientHandle<'a> for &'a MistyControllerContext<'a> {
17    fn handle(self) -> MistyClientHandle<'a> {
18        self.handle
19    }
20}
21
22pub trait AsReadonlyMistyClientHandle<'a>: Copy {
23    fn readonly_handle(self) -> MistyReadonlyClientHandle<'a>;
24}
25
26impl<'a, S> AsReadonlyMistyClientHandle<'a> for S
27where
28    S: AsMistyClientHandle<'a>,
29{
30    fn readonly_handle(self) -> MistyReadonlyClientHandle<'a> {
31        MistyReadonlyClientHandle {
32            inner: self.handle().inner,
33        }
34    }
35}
36
37impl<'a> AsReadonlyMistyClientHandle<'a> for MistyReadonlyClientHandle<'a> {
38    fn readonly_handle(self) -> MistyReadonlyClientHandle<'a> {
39        self
40    }
41}