Skip to main content

as_http_status_code/
lib.rs

1pub use as_http_status_code_derive::AsStatusCode;
2pub use http::StatusCode;
3
4pub trait AsStatusCode {
5    fn as_status_code(&self) -> StatusCode;
6}
7
8#[cfg(test)]
9#[allow(unused)]
10mod tests {
11    use as_http_status_code::AsStatusCode;
12    use http::StatusCode;
13
14    #[derive(AsStatusCode)]
15    enum Foo {
16        #[as_status_code(StatusCode::OK)]
17        Ok,
18        #[as_status_code(StatusCode::NOT_FOUND)]
19        NotFound(i32),
20        #[as_status_code(StatusCode::INTERNAL_SERVER_ERROR)]
21        InternalServerError { message: String },
22    }
23
24    #[derive(AsStatusCode)]
25    #[as_status_code(StatusCode::OK)]
26    struct Bar {
27        _field: (),
28    }
29
30    #[test]
31    fn foo() {
32        assert_eq!(Foo::Ok.as_status_code(), StatusCode::OK);
33
34        assert_eq!(Foo::NotFound(789).as_status_code(), StatusCode::NOT_FOUND);
35
36        assert_eq!(
37            Foo::InternalServerError {
38                message: "msg".to_owned()
39            }
40            .as_status_code(),
41            StatusCode::INTERNAL_SERVER_ERROR
42        );
43
44        assert_eq!(Bar { _field: () }.as_status_code(), StatusCode::OK);
45    }
46}