systemprompt-files 0.2.2

File storage, metadata, and access control for systemprompt.io AI governance infrastructure. Governed file operations for the MCP governance pipeline.
Documentation
use systemprompt_identifiers::{ContextId, FileId, SessionId, TraceId, UserId};

#[derive(Debug, Clone)]
pub struct FileUploadRequest {
    pub name: Option<String>,
    pub mime_type: String,
    pub bytes_base64: String,
    pub context_id: ContextId,
    pub user_id: Option<UserId>,
    pub session_id: Option<SessionId>,
    pub trace_id: Option<TraceId>,
}

#[derive(Debug)]
pub struct FileUploadRequestBuilder {
    mime_type: String,
    bytes_base64: String,
    context_id: ContextId,
    name: Option<String>,
    user_id: Option<UserId>,
    session_id: Option<SessionId>,
    trace_id: Option<TraceId>,
}

impl FileUploadRequestBuilder {
    pub fn new(
        mime_type: impl Into<String>,
        bytes_base64: impl Into<String>,
        context_id: ContextId,
    ) -> Self {
        Self {
            mime_type: mime_type.into(),
            bytes_base64: bytes_base64.into(),
            context_id,
            name: None,
            user_id: None,
            session_id: None,
            trace_id: None,
        }
    }

    pub fn with_name(mut self, name: impl Into<String>) -> Self {
        self.name = Some(name.into());
        self
    }

    pub fn with_user_id(mut self, user_id: UserId) -> Self {
        self.user_id = Some(user_id);
        self
    }

    pub fn with_session_id(mut self, session_id: SessionId) -> Self {
        self.session_id = Some(session_id);
        self
    }

    pub fn with_trace_id(mut self, trace_id: TraceId) -> Self {
        self.trace_id = Some(trace_id);
        self
    }

    pub fn build(self) -> FileUploadRequest {
        FileUploadRequest {
            name: self.name,
            mime_type: self.mime_type,
            bytes_base64: self.bytes_base64,
            context_id: self.context_id,
            user_id: self.user_id,
            session_id: self.session_id,
            trace_id: self.trace_id,
        }
    }
}

impl FileUploadRequest {
    pub fn builder(
        mime_type: impl Into<String>,
        bytes_base64: impl Into<String>,
        context_id: ContextId,
    ) -> FileUploadRequestBuilder {
        FileUploadRequestBuilder::new(mime_type, bytes_base64, context_id)
    }
}

#[derive(Debug, Clone)]
pub struct UploadedFile {
    pub file_id: FileId,
    pub path: String,
    pub public_url: String,
    pub size_bytes: i64,
}