1use melodium_core::{executive::*, *};
2use melodium_macro::{mel_data, mel_function};
3use trillium::Status;
4
5#[mel_data(traits(ToString PartialEquality Equality Display))]
10#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
11pub struct HttpStatus(pub Status);
12
13impl ToString for HttpStatus {
14 fn to_string(&self) -> string {
15 format!("{} {}", self.0 as u16, self.0.canonical_reason())
16 }
17}
18
19impl Display for HttpStatus {
20 fn display(&self, f: &mut core::fmt::Formatter<'_>) -> Result<(), core::fmt::Error> {
21 write!(f, "{}", melodium_core::executive::ToString::to_string(self))
22 }
23}
24
25#[mel_function]
29pub fn status(code: u16) -> Option<HttpStatus> {
30 match Status::try_from(code) {
31 Ok(status) => Some(HttpStatus(status)),
32 Err(_) => None,
33 }
34}
35
36#[mel_function]
38pub fn ok() -> HttpStatus {
39 HttpStatus(Status::Ok)
40}
41
42#[mel_function]
44pub fn moved_permanently() -> HttpStatus {
45 HttpStatus(Status::MovedPermanently)
46}
47
48#[mel_function]
50pub fn temporary_redirect() -> HttpStatus {
51 HttpStatus(Status::TemporaryRedirect)
52}
53
54#[mel_function]
56pub fn permanent_redirect() -> HttpStatus {
57 HttpStatus(Status::PermanentRedirect)
58}
59
60#[mel_function]
62pub fn forbidden() -> HttpStatus {
63 HttpStatus(Status::Forbidden)
64}
65
66#[mel_function]
68pub fn not_found() -> HttpStatus {
69 HttpStatus(Status::NotFound)
70}