spm_swift_package/infrastructure/
network_client.rs

1use reqwest;
2
3pub struct NetworkClient {
4    client: reqwest::Client,
5}
6
7impl NetworkClient {
8    pub fn new() -> Self {
9        NetworkClient {
10            client: reqwest::Client::new(),
11        }
12    }
13
14    pub async fn get_json<T: for<'de> serde::Deserialize<'de>>(
15        &self,
16        url: &str,
17        user_agent: &str,
18    ) -> Result<T, Box<dyn std::error::Error + Send + Sync>> {
19        let response = self
20            .client
21            .get(url)
22            .header(reqwest::header::USER_AGENT, user_agent)
23            .send()
24            .await?;
25
26        if response.status().is_success() {
27            let parsed = response.json::<T>().await?;
28            Ok(parsed)
29        } else {
30            Err(format!("Request failed: {}", response.status()).into())
31        }
32    }
33}