ferridriver_script/bindings/
download.rs1use ferridriver::download::Download as CoreDownload;
10use rquickjs::JsLifetime;
11use rquickjs::class::Trace;
12
13use crate::bindings::convert::FerriResultExt;
14
15#[derive(JsLifetime, Trace)]
16#[rquickjs::class(rename = "Download")]
17pub struct DownloadJs {
18 #[qjs(skip_trace)]
19 inner: CoreDownload,
20}
21
22impl DownloadJs {
23 #[must_use]
24 pub fn new(inner: CoreDownload) -> Self {
25 Self { inner }
26 }
27}
28
29#[rquickjs::methods]
30impl DownloadJs {
31 #[qjs(rename = "url")]
33 pub fn url(&self) -> String {
34 self.inner.url().to_string()
35 }
36
37 #[qjs(rename = "suggestedFilename")]
39 pub fn suggested_filename(&self) -> String {
40 self.inner.suggested_filename()
41 }
42
43 #[qjs(rename = "page")]
47 pub fn page(&self) -> Option<crate::bindings::page::PageJs> {
48 self.inner.page().map(crate::bindings::page::PageJs::new)
49 }
50
51 #[qjs(rename = "path")]
53 pub async fn path(&self) -> rquickjs::Result<String> {
54 let p = self.inner.path().await.into_js()?;
55 Ok(p.to_string_lossy().into_owned())
56 }
57
58 #[qjs(rename = "saveAs")]
60 pub async fn save_as(&self, path: String) -> rquickjs::Result<()> {
61 self.inner.save_as(&std::path::PathBuf::from(path)).await.into_js()
62 }
63
64 #[qjs(rename = "cancel")]
66 pub async fn cancel(&self) -> rquickjs::Result<()> {
67 self.inner.cancel().await.into_js()
68 }
69
70 #[qjs(rename = "delete")]
72 pub async fn delete(&self) -> rquickjs::Result<()> {
73 self.inner.delete().await.into_js()
74 }
75
76 #[qjs(rename = "failure")]
78 pub async fn failure(&self) -> Option<String> {
79 self.inner.failure().await
80 }
81}