systemprompt_files/services/
providers.rs1use 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}