systemprompt_models/documents/
sharing_events.rs1use chrono::{DateTime, Utc};
11use schemars::JsonSchema;
12use serde::{Deserialize, Serialize};
13use systemprompt_identifiers::{
14 AgentName, DocumentAccessRequestId, DocumentCommentId, DocumentId, UserId,
15};
16
17use super::access::AccessLevel;
18
19#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
20pub struct DocumentSharedEvent {
21 pub document_id: DocumentId,
22 pub document_name: String,
23 pub recipient_user_id: UserId,
24 pub subject_kind: String,
25 pub subject_value: String,
26 pub level: AccessLevel,
27 pub by: UserId,
28 pub shared_by: String,
29 #[serde(default, skip_serializing_if = "Option::is_none")]
30 pub message: Option<String>,
31 #[serde(default)]
32 pub v: u32,
33 #[serde(default, skip_serializing_if = "Option::is_none")]
34 pub via_agent: Option<AgentName>,
35 #[serde(default, skip_serializing_if = "Option::is_none")]
36 pub comment_id: Option<DocumentCommentId>,
37 #[serde(default, skip_serializing_if = "Option::is_none")]
38 pub created_at: Option<DateTime<Utc>>,
39}
40
41pub const SHARED_EVENT_VERSION: u32 = 1;
42
43impl DocumentSharedEvent {
44 pub const NAME: &'static str = "document.shared";
45}
46
47#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
48pub struct DocumentAccessRequestedEvent {
49 pub document_id: DocumentId,
50 pub document_name: String,
51 pub request_id: DocumentAccessRequestId,
52 pub requester_user_id: UserId,
53 pub requester_display: String,
54 pub level: AccessLevel,
55 #[serde(default, skip_serializing_if = "Option::is_none")]
56 pub message: Option<String>,
57}
58
59impl DocumentAccessRequestedEvent {
60 pub const NAME: &'static str = "document.access_requested";
61}
62
63#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
64pub struct DocumentOwnershipTransferredEvent {
65 pub document_id: DocumentId,
66 pub from: UserId,
67 pub to: UserId,
68}
69
70impl DocumentOwnershipTransferredEvent {
71 pub const NAME: &'static str = "document.ownership_transferred";
72}