diff options
Diffstat (limited to 'src/messages/format_msg.rs')
| -rw-r--r-- | src/messages/format_msg.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/messages/format_msg.rs b/src/messages/format_msg.rs new file mode 100644 index 0000000..34e4981 --- /dev/null +++ b/src/messages/format_msg.rs @@ -0,0 +1,37 @@ +use actix_web::{http::StatusCode, Error, HttpRequest, HttpResponse, Responder}; +use serde::Serialize; + +pub struct FormatMsg<T> { + pub message: T, + pub code: StatusCode, +} + +impl<T> FormatMsg<T> { + /// Deconstruct to an inner value + pub fn into_inner(self) -> T { + self.message + } + + pub fn ok(message: T) -> Self { + FormatMsg { + message: message, + code: StatusCode::OK, + } + } +} + +impl<T: Serialize> Responder for FormatMsg<T> { + type Error = Error; + type Future = Result<HttpResponse, Error>; + + fn respond_to(self, _: &HttpRequest) -> Self::Future { + let body = match serde_json::to_string(&self.message) { + Ok(body) => body, + Err(e) => return Err(e.into()), + }; + + Ok(HttpResponse::build(self.code) + .content_type("application/json") + .body(body)) + } +}
\ No newline at end of file |
