1use crate::{AverDisplay, AverList, AverMap, AverStr};
2
3#[derive(Clone, Debug, PartialEq, Eq, Hash, Ord, PartialOrd)]
4pub struct TerminalSize {
5 pub width: i64,
6 pub height: i64,
7}
8
9impl AverDisplay for TerminalSize {
10 fn aver_display(&self) -> String {
11 format!(
12 "Terminal.Size(width: {}, height: {})",
13 self.width.aver_display_inner(),
14 self.height.aver_display_inner()
15 )
16 }
17
18 fn aver_display_inner(&self) -> String {
19 self.aver_display()
20 }
21}
22
23#[derive(Clone, Debug, PartialEq, Eq, Hash, Ord, PartialOrd)]
24pub struct Header {
25 pub name: AverStr,
26 pub value: AverStr,
27}
28
29impl Header {
30 pub fn from_strings(name: String, value: String) -> Self {
32 Self {
33 name: AverStr::from(name),
34 value: AverStr::from(value),
35 }
36 }
37}
38
39impl AverDisplay for Header {
40 fn aver_display(&self) -> String {
41 format!(
42 "Header(name: {}, value: {})",
43 self.name.aver_display_inner(),
44 self.value.aver_display_inner()
45 )
46 }
47
48 fn aver_display_inner(&self) -> String {
49 self.aver_display()
50 }
51}
52
53pub type HttpHeaders = AverMap<AverStr, AverList<AverStr>>;
58
59#[derive(Clone, Debug, PartialEq)]
60pub struct HttpResponse {
61 pub status: i64,
62 pub body: AverStr,
63 pub headers: HttpHeaders,
64}
65
66impl AverDisplay for HttpResponse {
67 fn aver_display(&self) -> String {
68 format!(
69 "HttpResponse(status: {}, body: {}, headers: {})",
70 self.status.aver_display_inner(),
71 self.body.aver_display_inner(),
72 self.headers.aver_display_inner()
73 )
74 }
75
76 fn aver_display_inner(&self) -> String {
77 self.aver_display()
78 }
79}
80
81#[derive(Clone, Debug, PartialEq)]
82pub struct HttpRequest {
83 pub method: AverStr,
84 pub path: AverStr,
85 pub body: AverStr,
86 pub headers: HttpHeaders,
87}
88
89impl AverDisplay for HttpRequest {
90 fn aver_display(&self) -> String {
91 format!(
92 "HttpRequest(method: {}, path: {}, body: {}, headers: {})",
93 self.method.aver_display_inner(),
94 self.path.aver_display_inner(),
95 self.body.aver_display_inner(),
96 self.headers.aver_display_inner()
97 )
98 }
99
100 fn aver_display_inner(&self) -> String {
101 self.aver_display()
102 }
103}
104
105#[derive(Clone, Debug, PartialEq, Eq, Hash, Ord, PartialOrd)]
106pub struct TcpConnection {
107 pub id: AverStr,
108 pub host: AverStr,
109 pub port: i64,
110}
111
112impl TcpConnection {
113 pub fn from_parts(id: String, host: String, port: i64) -> Self {
114 Self {
115 id: AverStr::from(id),
116 host: AverStr::from(host),
117 port,
118 }
119 }
120}
121
122impl AverDisplay for TcpConnection {
123 fn aver_display(&self) -> String {
124 format!(
125 "Tcp.Connection(id: {}, host: {}, port: {})",
126 self.id.aver_display_inner(),
127 self.host.aver_display_inner(),
128 self.port.aver_display_inner()
129 )
130 }
131
132 fn aver_display_inner(&self) -> String {
133 self.aver_display()
134 }
135}