gemini_rust/file_search/
store_builder.rs

1use std::sync::Arc;
2use tracing::instrument;
3
4use crate::client::{Error, GeminiClient};
5use crate::file_search::model::CreateFileSearchStoreRequest;
6use crate::file_search::FileSearchStoreHandle;
7
8/// Builder for creating a new file search store.
9///
10/// # Example
11///
12/// ```no_run
13/// use gemini_rust::prelude::*;
14/// # async fn example() -> Result<(), Box<dyn std::error::Error>> {
15/// let client = Gemini::new("API_KEY")?;
16///
17/// let store = client
18///     .create_file_search_store()
19///     .with_display_name("Documentation Store")
20///     .execute()
21///     .await?;
22/// # Ok(())
23/// # }
24/// ```
25pub struct FileSearchStoreBuilder {
26    pub(crate) client: Arc<GeminiClient>,
27    pub(crate) display_name: Option<String>,
28}
29
30impl FileSearchStoreBuilder {
31    pub fn with_display_name(mut self, name: impl Into<String>) -> Self {
32        self.display_name = Some(name.into());
33        self
34    }
35
36    #[instrument(skip_all, fields(
37        display_name = self.display_name.as_deref(),
38    ))]
39    pub async fn execute(self) -> Result<FileSearchStoreHandle, Error> {
40        let request = CreateFileSearchStoreRequest {
41            display_name: self.display_name,
42        };
43
44        let store = self.client.create_file_search_store(request).await?;
45
46        Ok(FileSearchStoreHandle::new(self.client, store))
47    }
48}