web_extensions/
downloads.rs

1//! Wrapper for the [`chrome.downloads` API](https://developer.chrome.com/docs/extensions/reference/downloads/).
2
3use crate::{util::*, Error};
4use serde::{Deserialize, Serialize};
5use std::path::PathBuf;
6use web_extensions_sys as sys;
7
8/// <https://developer.chrome.com/docs/extensions/reference/downloads/#method-search>
9pub async fn search(query: &Query<'_>) -> Result<Vec<DownloadItem>, Error> {
10    let js_query = js_from_serde(query)?;
11    let js_value = sys::chrome().downloads().search(&js_query).await?;
12    serde_from_js(js_value)
13}
14
15/// <https://developer.chrome.com/docs/extensions/reference/downloads/#type-DownloadQuery>
16#[derive(Debug, Clone, Serialize)]
17#[serde(rename_all = "camelCase")]
18pub struct Query<'a> {
19    pub query: Option<Vec<&'a str>>,
20    pub start_time: Option<&'a str>,
21}
22
23impl<'a> From<&'a str> for Query<'a> {
24    fn from(q: &'a str) -> Self {
25        Self {
26            query: Some(vec![q]),
27            start_time: None,
28        }
29    }
30}
31
32/// <https://developer.chrome.com/docs/extensions/reference/downloads/#type-DownloadItem>
33#[derive(Debug, Clone, Deserialize)]
34#[serde(rename_all = "camelCase")]
35pub struct DownloadItem {
36    pub filename: PathBuf,
37    pub mime: String,
38    pub start_time: String,
39    pub url: String,
40}