gemini_rust/files/
handle.rs1use snafu::ResultExt;
2use std::sync::Arc;
3
4use super::*;
5use crate::client::GeminiClient;
6
7#[derive(Clone)]
9pub struct FileHandle {
10 inner: super::model::File,
11 client: Arc<GeminiClient>,
12}
13
14impl FileHandle {
15 pub(crate) fn new(client: Arc<GeminiClient>, inner: super::model::File) -> Self {
16 Self { inner, client }
17 }
18
19 pub fn name(&self) -> &str {
20 &self.inner.name
21 }
22
23 pub fn get_file_meta(&self) -> &super::model::File {
25 &self.inner
26 }
27
28 #[allow(clippy::result_large_err)]
30 pub async fn delete(self) -> Result<(), (Self, Error)> {
31 match self
32 .client
33 .delete_file(&self.inner.name)
34 .await
35 .context(ClientSnafu)
36 {
37 Ok(_) => Ok(()),
38 Err(e) => Err((self, e)),
39 }
40 }
41
42 pub async fn download(&self) -> Result<Vec<u8>, Error> {
46 self.client
47 .download_file(self.name())
48 .await
49 .context(ClientSnafu)
50 }
51}