2022-04-28 11:53:59 -06:00
use std ::borrow ::Cow ;
2022-04-22 12:24:38 -06:00
use axum ::{ response ::IntoResponse , Json } ;
use serde ::{ Deserialize , Serialize } ;
2021-04-20 10:07:11 -06:00
pub mod history ;
pub mod user ;
2022-06-06 02:58:19 -06:00
const VERSION : & str = env! ( " CARGO_PKG_VERSION " ) ;
#[ derive(Debug, Serialize, Deserialize) ]
pub struct IndexResponse {
pub homage : String ,
pub version : String ,
}
pub async fn index ( ) -> Json < IndexResponse > {
let homage = r # ""Through the fathomless deeps of space swims the star turtle Great A'Tuin, bearing on its back the four giant elephants who carry on their shoulders the mass of the Discworld." -- Sir Terry Pratchett"# ;
Json ( IndexResponse {
homage : homage . to_string ( ) ,
version : VERSION . to_string ( ) ,
} )
2021-04-20 10:07:11 -06:00
}
2022-04-22 12:24:38 -06:00
#[ derive(Debug, Serialize, Deserialize) ]
pub struct ErrorResponse < ' a > {
pub reason : Cow < ' a , str > ,
}
impl < ' a > IntoResponse for ErrorResponseStatus < ' a > {
fn into_response ( self ) -> axum ::response ::Response {
( self . status , Json ( self . error ) ) . into_response ( )
}
}
pub struct ErrorResponseStatus < ' a > {
pub error : ErrorResponse < ' a > ,
pub status : http ::StatusCode ,
}
impl < ' a > ErrorResponse < ' a > {
pub fn with_status ( self , status : http ::StatusCode ) -> ErrorResponseStatus < ' a > {
ErrorResponseStatus {
error : self ,
status ,
}
}
pub fn reply ( reason : & ' a str ) -> ErrorResponse {
Self {
reason : reason . into ( ) ,
}
}
}