Skip to main content

systemprompt_files/services/
providers.rs

1use async_trait::async_trait;
2use systemprompt_traits::{
3    FileUploadInput, FileUploadProvider, FileUploadProviderError, FileUploadResult,
4    UploadedFileInfo,
5};
6
7use super::upload::{FileUploadRequest, FileUploadService};
8
9#[async_trait]
10impl FileUploadProvider for FileUploadService {
11    fn is_enabled(&self) -> bool {
12        Self::is_enabled(self)
13    }
14
15    async fn upload_file(&self, input: FileUploadInput) -> FileUploadResult<UploadedFileInfo> {
16        let mut builder =
17            FileUploadRequest::builder(&input.mime_type, &input.bytes_base64, input.context_id);
18
19        if let Some(name) = input.name {
20            builder = builder.with_name(&name);
21        }
22
23        if let Some(user_id) = input.user_id {
24            builder = builder.with_user_id(user_id);
25        }
26
27        if let Some(session_id) = input.session_id {
28            builder = builder.with_session_id(session_id);
29        }
30
31        if let Some(trace_id) = input.trace_id {
32            builder = builder.with_trace_id(trace_id);
33        }
34
35        let request = builder.build();
36
37        let uploaded = Self::upload_file(self, request)
38            .await
39            .map_err(|e| FileUploadProviderError::StorageError(e.to_string()))?;
40
41        Ok(UploadedFileInfo {
42            file_id: uploaded.file_id,
43            public_url: uploaded.public_url,
44            size_bytes: Some(uploaded.size_bytes),
45        })
46    }
47}