server_fn/response/
mod.rs1#[cfg(feature = "actix-no-default")]
3pub mod actix;
4#[cfg(feature = "browser")]
6pub mod browser;
7#[cfg(feature = "generic")]
8pub mod generic;
9#[cfg(feature = "axum-no-default")]
11pub mod http;
12#[cfg(feature = "reqwest")]
14pub mod reqwest;
15
16use bytes::Bytes;
17use futures::Stream;
18use std::future::Future;
19
20pub trait TryRes<E>
22where
23 Self: Sized,
24{
25 fn try_from_string(content_type: &str, data: String) -> Result<Self, E>;
27
28 fn try_from_bytes(content_type: &str, data: Bytes) -> Result<Self, E>;
30
31 fn try_from_stream(
33 content_type: &str,
34 data: impl Stream<Item = Result<Bytes, Bytes>> + Send + 'static,
35 ) -> Result<Self, E>;
36}
37
38pub trait Res {
40 fn error_response(path: &str, err: Bytes) -> Self;
42 fn content_type(&mut self, #[allow(unused_variables)] content_type: &str) {
44 }
48 fn redirect(&mut self, path: &str);
50}
51
52pub trait ClientRes<E> {
54 fn try_into_string(self) -> impl Future<Output = Result<String, E>> + Send;
56
57 fn try_into_bytes(self) -> impl Future<Output = Result<Bytes, E>> + Send;
59
60 fn try_into_stream(
62 self,
63 ) -> Result<
64 impl Stream<Item = Result<Bytes, Bytes>> + Send + Sync + 'static,
65 E,
66 >;
67
68 fn status(&self) -> u16;
70
71 fn status_text(&self) -> String;
73
74 fn location(&self) -> String;
76
77 fn has_redirect(&self) -> bool;
79}
80
81pub struct BrowserMockRes;
88
89impl<E> TryRes<E> for BrowserMockRes {
90 fn try_from_string(_content_type: &str, _data: String) -> Result<Self, E> {
91 unreachable!()
92 }
93
94 fn try_from_bytes(_content_type: &str, _data: Bytes) -> Result<Self, E> {
95 unreachable!()
96 }
97
98 fn try_from_stream(
99 _content_type: &str,
100 _data: impl Stream<Item = Result<Bytes, Bytes>>,
101 ) -> Result<Self, E> {
102 unreachable!()
103 }
104}
105
106impl Res for BrowserMockRes {
107 fn error_response(_path: &str, _err: Bytes) -> Self {
108 unreachable!()
109 }
110
111 fn content_type(&mut self, _content_type: &str) {
112 unreachable!()
113 }
114
115 fn redirect(&mut self, _path: &str) {
116 unreachable!()
117 }
118}