1use std::ops::Deref;
2use std::rc::Rc;
3
4pub struct Session<T, St>(Rc<SessionInner<T, St>>);
6
7struct SessionInner<T, St> {
8 st: St,
9 sink: T,
10}
11
12impl<T, St> Clone for Session<T, St> {
13 #[inline]
14 fn clone(&self) -> Self {
15 Session(self.0.clone())
16 }
17}
18
19impl<T, St> Session<T, St> {
20 pub(crate) fn new(st: St, sink: T) -> Self {
21 Session(Rc::new(SessionInner { st, sink }))
22 }
23
24 #[inline]
25 pub fn sink(&self) -> &T {
26 &self.0.sink
27 }
28
29 #[inline]
30 pub fn state(&self) -> &St {
31 &self.0.st
32 }
33}
34
35impl<T, St> Deref for Session<T, St> {
36 type Target = St;
37
38 #[inline]
39 fn deref(&self) -> &St {
40 &self.0.st
41 }
42}