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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
use serde::Serialize;
use crate::request;
#[derive(Serialize)]
pub struct Message<SessionState = serde_json::Value> {
pub response: Response<SessionState>,
pub session: Option<request::Session>,
version: &'static str,
}
impl<SessionState> Message<SessionState>{
pub fn new()->Self{
return Message{
response: Response::default(),
version: "1.0",
session: Some(request::Session::default()),
}
}
pub fn from_request(req: &request::Request<SessionState>)->Self{
let mut mess = Self::new();
mess.session = Some(req.session.clone());
return mess;
}
pub fn with_response(mut self, resp: Response<SessionState>)->Self
{
self.response = resp;
return self;
}
pub fn with_session(mut self, session: request::Session)->Self{
self.session = Some(session);
return self;
}
}
#[derive(Serialize)]
pub struct Response<SessionState=serde_json::Value> {
pub text: String,
pub end_session: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub session_state:Option<SessionState>,
}
impl<SessionState> Response<SessionState>{
pub fn with_text(mut self, text: String)->Self{
self.text = text;
return self;
}
}
impl<SessionState> Default for Response<SessionState>{
fn default()->Self{
return Response::<SessionState>{
text: String::default(),
end_session: bool::default(),
session_state: None,
}
}
}
impl<SessionState> Response<SessionState>{
pub fn from_request(req: request::Request<SessionState>)->Self{
let mut resp = Self::default();
resp.session_state = req.session_state;
return resp;
}
}