Skip to main content

aver_rt/
service_types.rs

1use crate::{AverDisplay, AverList, 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    /// Convenience constructor from owned Strings (used by interpreter/aver-rt internals).
31    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
53#[derive(Clone, Debug, PartialEq)]
54pub struct HttpResponse {
55    pub status: i64,
56    pub body: AverStr,
57    pub headers: AverList<Header>,
58}
59
60impl AverDisplay for HttpResponse {
61    fn aver_display(&self) -> String {
62        format!(
63            "HttpResponse(status: {}, body: {}, headers: {})",
64            self.status.aver_display_inner(),
65            self.body.aver_display_inner(),
66            self.headers.aver_display_inner()
67        )
68    }
69
70    fn aver_display_inner(&self) -> String {
71        self.aver_display()
72    }
73}
74
75#[derive(Clone, Debug, PartialEq)]
76pub struct HttpRequest {
77    pub method: AverStr,
78    pub path: AverStr,
79    pub body: AverStr,
80    pub headers: AverList<Header>,
81}
82
83impl AverDisplay for HttpRequest {
84    fn aver_display(&self) -> String {
85        format!(
86            "HttpRequest(method: {}, path: {}, body: {}, headers: {})",
87            self.method.aver_display_inner(),
88            self.path.aver_display_inner(),
89            self.body.aver_display_inner(),
90            self.headers.aver_display_inner()
91        )
92    }
93
94    fn aver_display_inner(&self) -> String {
95        self.aver_display()
96    }
97}
98
99#[derive(Clone, Debug, PartialEq, Eq, Hash, Ord, PartialOrd)]
100pub struct TcpConnection {
101    pub id: AverStr,
102    pub host: AverStr,
103    pub port: i64,
104}
105
106impl TcpConnection {
107    pub fn from_parts(id: String, host: String, port: i64) -> Self {
108        Self {
109            id: AverStr::from(id),
110            host: AverStr::from(host),
111            port,
112        }
113    }
114}
115
116impl AverDisplay for TcpConnection {
117    fn aver_display(&self) -> String {
118        format!(
119            "Tcp.Connection(id: {}, host: {}, port: {})",
120            self.id.aver_display_inner(),
121            self.host.aver_display_inner(),
122            self.port.aver_display_inner()
123        )
124    }
125
126    fn aver_display_inner(&self) -> String {
127        self.aver_display()
128    }
129}