ft_sdk/from_request/
config.rs1pub 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}