ft_sdk/from_request/
scheme.rs

1#[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            // This is a bug fix for fastn, in fastn we pass the scheme as wasm+proxy, it should
21            // be http or https. This is a temporary fix until we fix fastn.
22            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}