http_async/
response.rs

1use
2{
3  super::
4  {
5    Content,
6    KeyValuePair,
7    status::
8    {
9      Status,
10    },
11    version::
12    {
13      Version,
14    },
15  },
16};
17
18/// Hyper Text Transfer Protocol Response.
19pub struct    Response
20{
21  /// Protocol Version.
22  pub version:                          Version,
23  /// Status Code.
24  pub status:                           Status,
25  /// List of Header Key Value Pairs.
26  pub header:                           Vec < KeyValuePair  >,
27  /// Content of Response.
28  pub content:                          Vec < u8            >,
29}
30
31/// Constructor for a dummy `Response`.
32pub fn  Response  ( )
33->  Response
34{
35  Response
36  {
37    version:                            Version::HTTP_10,
38    status:                             Status::Ok,
39    header:                             Vec::new(),
40    content:                            Vec::new(),
41  }
42}
43
44impl          Response
45{
46  /// Consumes `Response` and converts it to `Vec<u8>`.
47  pub fn        into_vector
48  (
49    mut self,
50  )
51  ->  Vec < u8  >
52  {
53    let mut buffer:         Vec < u8  > =   Vec::new();
54    let mut header
55    =   format!
56        (
57          "{} {}\r\n{}\r\n",
58          self.version,
59          self.status,
60          {
61            let mut result              =   "".to_owned ( );
62            for pair                    in  &self.header
63            {
64              result
65                .push_str
66                (
67                  &format!
68                  (
69                    "{}: {}\r\n",
70                    pair.key,
71                    pair.value,
72                  )
73                );
74            }
75            result
76          },
77        ).into_bytes  ( );
78    buffer.append           ( &mut header       );
79    buffer.append           ( &mut self.content );
80    buffer
81  }
82
83  /// Add a `header`-value to `Response` in an OOP-Style.
84  ///
85  /// # Arguments
86  /// * `key`                           – key of new header entry,
87  /// * `value`                         – value of new header entry.
88  pub fn        addHeader
89  (
90    mut self,
91    key:                                String,
92    value:                              String,
93  )
94  ->  Self
95  {
96    self
97      .header
98      .push
99      (
100        KeyValuePair
101        {
102          key,
103          value,
104        }
105      );
106    self
107  }
108
109  /// Set `version` of `Response` in an OOP-Style.
110  ///
111  /// # Arguments
112  /// * `version`                       – hyper text protocol version.
113  pub fn        version
114  (
115    mut self,
116    version:                            Version,
117  )
118  ->  Self
119  {
120    self.version                        =   version;
121    self
122  }
123
124  /// Set `status` of `Response` in an OOP-Style.
125  ///
126  /// # Arguments
127  /// * `status`                       – hyper text protocol respone status code.
128  pub fn        status
129  (
130    mut self,
131    status:                             Status,
132  )
133  ->  Self
134  {
135    self.status                         =   status;
136    self
137  }
138
139  /// Set `content` of `Response` in an OOP-Style.
140  ///
141  /// # Arguments
142  /// * `contentType`                   – type of body,
143  /// * `contentBody`                   – actual body.
144  pub fn        content
145  (
146    mut self,
147    this:                               Content,
148  )
149  ->  Self
150  {
151    let     length                      =   this.contentBody.len ( );
152    self.content                        =   this.contentBody;
153    self.status                         =   this.statusCode;
154    self
155      .addHeader
156      (
157        "Content-Type".to_owned(),
158        this.contentType.to_owned(),
159      )
160      .addHeader
161      (
162        "Content-Length".to_owned(),
163        format!
164        (
165          "{}",
166          length,
167        ),
168      )
169  }
170}