ft_sdk/from_request/
scheme.rs1#[derive(Debug, Clone, PartialEq, Eq, Hash)]
2pub enum Scheme {
3 Http,
4 Https,
5}
6
7impl std::fmt::Display for Scheme {
8 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9 match self {
10 Scheme::Http => write!(f, "http"),
11 Scheme::Https => write!(f, "https"),
12 }
13 }
14}
15
16impl ft_sdk::FromRequest for Scheme {
17 fn from_request(req: &http::Request<serde_json::Value>) -> ft_sdk::Result<Scheme> {
18 let scheme = req.uri().scheme_str().unwrap_or_default();
19 if scheme == "wasm+proxy" {
20 let host: ft_sdk::Host = ft_sdk::Host::from_request(req)?;
23 return if host.without_port() == "127.0.0.1" {
24 Ok(Scheme::Http)
25 } else {
26 Ok(Scheme::Https)
27 };
28 }
29
30 if scheme == "https" {
31 return Ok(Scheme::Https);
32 }
33
34 Ok(Scheme::Http)
35 }
36}
37
38impl AsRef<str> for Scheme {
39 fn as_ref(&self) -> &str {
40 match self {
41 Scheme::Http => "http",
42 Scheme::Https => "https",
43 }
44 }
45}