gemini-rust 1.7.1

Rust client for Google Gemini API
Documentation
use std::sync::Arc;

use async_stream::stream;
use futures::Stream;

use crate::client::{Error, GeminiClient};
use crate::file_search::DocumentHandle;

pub struct DocumentBuilder {
    pub(crate) client: Arc<GeminiClient>,
    pub(crate) store_name: String,
}

impl DocumentBuilder {
    pub async fn get(self, document_id: &str) -> Result<DocumentHandle, Error> {
        let document = self
            .client
            .get_document(&self.store_name, document_id)
            .await?;

        Ok(DocumentHandle::new(self.client, document))
    }

    pub async fn delete(self, document_id: &str, force: bool) -> Result<(), Error> {
        self.client
            .delete_document(&self.store_name, document_id, force)
            .await
    }

    pub fn list(self, page_size: Option<u32>) -> impl Stream<Item = Result<DocumentHandle, Error>> {
        stream! {
            let mut page_token: Option<String> = None;
            loop {
                let response = self
                    .client
                    .list_documents(&self.store_name, page_size, page_token.as_deref())
                    .await?;

                for document in response.documents {
                    yield Ok(DocumentHandle::new(self.client.clone(), document));
                }

                match response.next_page_token {
                    Some(token) => page_token = Some(token),
                    None => break,
                }
            }
        }
    }
}