ft_sdk/from_request/
config.rs

1pub struct Config<T: serde::de::DeserializeOwned>(pub T);
2
3impl<T: serde::de::DeserializeOwned> Config<T> {
4    pub fn from_request_for_key(
5        key: &str,
6        req: &http::Request<serde_json::Value>,
7    ) -> ft_sdk::Result<Config<T>> {
8        let scheme: ft_sdk::Scheme = ft_sdk::FromRequest::from_request(req)?;
9        let host: ft_sdk::Host = ft_sdk::FromRequest::from_request(req)?;
10        let app_url = ft_sdk::from_request::app_url::from_request(key, req)?;
11
12        let url = ft_sdk::from_request::app_url::join(key, &app_url, &scheme, &host, "config")?;
13
14        let req = http::Request::builder()
15            .uri(url)
16            .body(bytes::Bytes::new())?;
17
18        let res = ft_sdk::http::send(req).unwrap();
19
20        serde_json::from_slice(res.body())
21            .map_err(|e| e.into())
22            .map(Config)
23    }
24
25    pub fn into(self) -> T {
26        self.0
27    }
28}
29
30impl<T: serde::de::DeserializeOwned> ft_sdk::FromRequest for Config<T> {
31    fn from_request(req: &http::Request<serde_json::Value>) -> ft_sdk::Result<Config<T>> {
32        Config::from_request_for_key(ft_sdk::from_request::app_url::CURRENT_APP_KEY, req)
33    }
34}
35
36impl<T: serde::de::DeserializeOwned> AsRef<T> for Config<T> {
37    fn as_ref(&self) -> &T {
38        &self.0
39    }
40}