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
43 fn redirect(&mut self, path: &str);
45}
46
47pub trait ClientRes<E> {
49 fn try_into_string(self) -> impl Future<Output = Result<String, E>> + Send;
51
52 fn try_into_bytes(self) -> impl Future<Output = Result<Bytes, E>> + Send;
54
55 fn try_into_stream(
57 self,
58 ) -> Result<
59 impl Stream<Item = Result<Bytes, Bytes>> + Send + Sync + 'static,
60 E,
61 >;
62
63 fn status(&self) -> u16;
65
66 fn status_text(&self) -> String;
68
69 fn location(&self) -> String;
71
72 fn has_redirect(&self) -> bool;
74}
75
76pub struct BrowserMockRes;
83
84impl<E> TryRes<E> for BrowserMockRes {
85 fn try_from_string(_content_type: &str, _data: String) -> Result<Self, E> {
86 unreachable!()
87 }
88
89 fn try_from_bytes(_content_type: &str, _data: Bytes) -> Result<Self, E> {
90 unreachable!()
91 }
92
93 fn try_from_stream(
94 _content_type: &str,
95 _data: impl Stream<Item = Result<Bytes, Bytes>>,
96 ) -> Result<Self, E> {
97 unreachable!()
98 }
99}
100
101impl Res for BrowserMockRes {
102 fn error_response(_path: &str, _err: Bytes) -> Self {
103 unreachable!()
104 }
105
106 fn redirect(&mut self, _path: &str) {
107 unreachable!()
108 }
109}