responder.rs 933 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #[allow(unused_imports)]
  2. use crate::errors::{DispatchError, InternalError};
  3. use crate::{
  4. request::EventRequest,
  5. response::{EventResponse, ResponseBuilder},
  6. };
  7. use bytes::Bytes;
  8. pub trait Responder {
  9. fn respond_to(self, req: &EventRequest) -> EventResponse;
  10. }
  11. macro_rules! impl_responder {
  12. ($res: ty) => {
  13. impl Responder for $res {
  14. fn respond_to(self, _: &EventRequest) -> EventResponse {
  15. ResponseBuilder::Ok().data(self).build()
  16. }
  17. }
  18. };
  19. }
  20. impl_responder!(&'static str);
  21. impl_responder!(String);
  22. impl_responder!(&'_ String);
  23. impl_responder!(Bytes);
  24. impl_responder!(());
  25. impl<T, E> Responder for Result<T, E>
  26. where
  27. T: Responder,
  28. E: Into<DispatchError>,
  29. {
  30. fn respond_to(self, request: &EventRequest) -> EventResponse {
  31. match self {
  32. Ok(val) => val.respond_to(request),
  33. Err(e) => e.into().into(),
  34. }
  35. }
  36. }