swink_agent_memory/
meta.rs1use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6#[non_exhaustive]
8#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
9pub struct SessionMeta {
10 pub id: String,
12 pub title: String,
14 pub created_at: DateTime<Utc>,
16 pub updated_at: DateTime<Utc>,
18 #[serde(default = "default_version")]
20 pub version: u32,
21 #[serde(default)]
23 pub sequence: u64,
24}
25
26const fn default_version() -> u32 {
27 1
28}
29
30impl SessionMeta {
31 #[must_use]
37 pub fn new(
38 id: impl Into<String>,
39 title: impl Into<String>,
40 created_at: DateTime<Utc>,
41 updated_at: DateTime<Utc>,
42 ) -> Self {
43 Self {
44 id: id.into(),
45 title: title.into(),
46 created_at,
47 updated_at,
48 version: default_version(),
49 sequence: 0,
50 }
51 }
52
53 #[must_use]
55 pub const fn with_version(mut self, version: u32) -> Self {
56 self.version = version;
57 self
58 }
59
60 #[must_use]
62 pub const fn with_sequence(mut self, sequence: u64) -> Self {
63 self.sequence = sequence;
64 self
65 }
66}
67
68#[cfg(test)]
69#[path = "meta_tests.rs"]
70mod tests;