made_core/entities/
published_agentic_system.rs1use serde::{Deserialize, Serialize};
4use time::OffsetDateTime;
5
6use crate::error::DomainError;
7use crate::value_objects::{
8 AgenticSystemDigest, AgenticSystemId, AgenticSystemRevision, SystemPin,
9};
10
11use super::AgenticSystem;
12
13#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
16pub struct PublishedAgenticSystem {
17 system: AgenticSystem,
18 digest: AgenticSystemDigest,
19 #[serde(with = "time::serde::rfc3339")]
20 published_at: OffsetDateTime,
21}
22
23impl PublishedAgenticSystem {
24 pub fn seal(system: AgenticSystem, published_at: OffsetDateTime) -> Result<Self, DomainError> {
26 let digest = system.digest()?;
27 Ok(Self {
28 system,
29 digest,
30 published_at,
31 })
32 }
33
34 #[must_use]
35 pub const fn system(&self) -> &AgenticSystem {
36 &self.system
37 }
38
39 #[must_use]
40 pub const fn digest(&self) -> AgenticSystemDigest {
41 self.digest
42 }
43
44 #[must_use]
45 pub const fn published_at(&self) -> OffsetDateTime {
46 self.published_at
47 }
48
49 #[must_use]
50 pub fn id(&self) -> &AgenticSystemId {
51 self.system.id()
52 }
53
54 #[must_use]
55 pub fn revision(&self) -> AgenticSystemRevision {
56 self.system.revision()
57 }
58
59 #[must_use]
61 pub fn pin(&self) -> SystemPin {
62 SystemPin::new(self.id().clone(), self.revision(), self.digest)
63 }
64
65 #[must_use]
66 pub fn into_system(self) -> AgenticSystem {
67 self.system
68 }
69}