responder.rs 959 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  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_responder!(Vec<u8>);
  26. impl<T, E> Responder for Result<T, E>
  27. where
  28. T: Responder,
  29. E: Into<DispatchError>,
  30. {
  31. fn respond_to(self, request: &EventRequest) -> EventResponse {
  32. match self {
  33. Ok(val) => val.respond_to(request),
  34. Err(e) => e.into().into(),
  35. }
  36. }
  37. }