Skip to main content

systemprompt_files/services/upload/
request.rs

1//! File-upload request model and builder.
2//!
3//! Copyright (c) systemprompt.io — Business Source License 1.1.
4//! See <https://systemprompt.io> for licensing details.
5
6use systemprompt_identifiers::{ContextId, FileId, SessionId, TraceId, UserId};
7
8#[derive(Debug, Clone)]
9pub struct FileUploadRequest {
10    pub name: Option<String>,
11    pub mime_type: String,
12    pub bytes_base64: String,
13    pub context_id: ContextId,
14    pub user_id: Option<UserId>,
15    pub session_id: Option<SessionId>,
16    pub trace_id: Option<TraceId>,
17}
18
19#[derive(Debug)]
20pub struct FileUploadRequestBuilder {
21    mime_type: String,
22    bytes_base64: String,
23    context_id: ContextId,
24    name: Option<String>,
25    user_id: Option<UserId>,
26    session_id: Option<SessionId>,
27    trace_id: Option<TraceId>,
28}
29
30impl FileUploadRequestBuilder {
31    pub fn new(
32        mime_type: impl Into<String>,
33        bytes_base64: impl Into<String>,
34        context_id: ContextId,
35    ) -> Self {
36        Self {
37            mime_type: mime_type.into(),
38            bytes_base64: bytes_base64.into(),
39            context_id,
40            name: None,
41            user_id: None,
42            session_id: None,
43            trace_id: None,
44        }
45    }
46
47    pub fn with_name(mut self, name: impl Into<String>) -> Self {
48        self.name = Some(name.into());
49        self
50    }
51
52    pub fn with_user_id(mut self, user_id: UserId) -> Self {
53        self.user_id = Some(user_id);
54        self
55    }
56
57    pub fn with_session_id(mut self, session_id: SessionId) -> Self {
58        self.session_id = Some(session_id);
59        self
60    }
61
62    pub fn with_trace_id(mut self, trace_id: TraceId) -> Self {
63        self.trace_id = Some(trace_id);
64        self
65    }
66
67    pub fn build(self) -> FileUploadRequest {
68        FileUploadRequest {
69            name: self.name,
70            mime_type: self.mime_type,
71            bytes_base64: self.bytes_base64,
72            context_id: self.context_id,
73            user_id: self.user_id,
74            session_id: self.session_id,
75            trace_id: self.trace_id,
76        }
77    }
78}
79
80impl FileUploadRequest {
81    pub fn builder(
82        mime_type: impl Into<String>,
83        bytes_base64: impl Into<String>,
84        context_id: ContextId,
85    ) -> FileUploadRequestBuilder {
86        FileUploadRequestBuilder::new(mime_type, bytes_base64, context_id)
87    }
88}
89
90#[derive(Debug, Clone)]
91pub struct UploadedFile {
92    pub file_id: FileId,
93    pub path: String,
94    pub public_url: String,
95    pub size_bytes: i64,
96}