adguardian/fetch/
fetch_filters.rs

1use reqwest::{Client, Response, header::HeaderMap};
2use serde::Deserialize;
3
4#[derive(Deserialize)]
5pub struct AdGuardFilteringStatus {
6    pub filters: Option<Vec<Filter>>,
7}
8
9#[derive(Deserialize)]
10pub struct Filter {
11    pub url: String,
12    pub name: String,
13    pub rules_count: u32,
14    pub enabled: bool,
15}
16
17pub async fn fetch_adguard_filter_list(
18    client: &Client,
19    endpoint: &str,
20    username: &str,
21    password: &str,
22) -> Result<AdGuardFilteringStatus, reqwest::Error> {
23    let url = format!("{}/control/filtering/status", endpoint);
24
25    let auth_string = format!("{}:{}", username, password);
26    let auth_header_value = format!("Basic {}", base64::encode(&auth_string));
27    let mut headers = HeaderMap::new();
28    headers.insert("Authorization", auth_header_value.parse().unwrap());
29
30    let res: Response = client.get(&url).headers(headers).send().await?;
31    let status: AdGuardFilteringStatus = res.json().await?;
32
33    Ok(status)
34}