ping_server/
ping_server.rs1use easy_sockets::{
3 error::{deserialize_error, serialize_error, ErrorCode},
4 start_server, tokio, Deserialize, Serialize, ServerConn,
5};
6
7enum PingError {
9 BadRequest,
10 InternalServerError,
11}
12impl ErrorCode for PingError {
13 fn to_code(&self) -> u16 {
14 match self {
15 PingError::BadRequest => 400,
16 PingError::InternalServerError => 500,
17 }
18 }
19
20 fn from_code(code: u16) -> Option<Self> {
21 Some(match code {
22 400 => PingError::BadRequest,
23 500 => PingError::InternalServerError,
24 _ => return None,
25 })
26 }
27
28 fn message(&self) -> &'static str {
29 match self {
30 PingError::BadRequest => "Request provided was invalid.",
31 PingError::InternalServerError => "Server encountered unexpected internal error.",
32 }
33 }
34}
35
36#[derive(Serialize, Deserialize)]
38enum ClientMsg {
39 Ping(String),
40}
41
42#[derive(Serialize, Deserialize)]
44enum ServerMsg {
45 #[serde(
46 serialize_with = "serialize_error",
47 deserialize_with = "deserialize_error"
48 )]
49 Error(PingError),
50 Ping(String),
51}
52
53struct ServerInstance {
55 response: String,
56}
57impl ServerConn for ServerInstance {
58 type ClientMsg = ClientMsg;
59 type ServerMsg = ServerMsg;
60
61 fn handle_message(&mut self, message: Self::ClientMsg) -> Self::ServerMsg {
62 match message {
63 ClientMsg::Ping(message) => {
64 println!("Received From Client: {}", message);
65 ServerMsg::Ping(self.response.clone())
66 }
67 }
68 }
69
70 fn new() -> Self {
71 Self {
72 response: "Hello Client".into(),
73 }
74 }
75}
76
77#[tokio::main]
78async fn main() {
79 let _ = start_server::<ServerInstance>("127.0.0.1:8000").await;
80}