1use crate::store_commit::{DeviceStreamAnchor, ObjectHash, StoreCreationId};
6
7pub const STORE_CREATION_ATTEMPT_STATE_KEY: &str = "store_creation_attempt_v1";
8
9#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
10#[serde(rename_all = "snake_case", deny_unknown_fields)]
11pub enum StoreCreationAttempt {
12 Initialized(StoreCreationAuthority),
13 RootReserved(StoreRootReservation),
14 FounderRegistrationReserved(FounderRegistrationReservation),
15 MembershipReserved(MembershipReservation),
16 CurrentPublicationReserved(CurrentPublicationReservation),
17 DescriptorReserved(DescriptorReservation),
18 FounderAcknowledgementsReserved(FounderAcknowledgementsReservation),
19 FounderNextAckReserved(FounderNextAckReservation),
20 FounderGraphReserved(FounderGraphReservation),
21}
22
23#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
24#[serde(deny_unknown_fields)]
25pub struct StoreCreationProbeIds {
26 exact_slots: crate::provider::ProviderProbeId,
27}
28
29impl StoreCreationProbeIds {
30 pub fn new(exact_slots: crate::provider::ProviderProbeId) -> Self {
31 Self { exact_slots }
32 }
33
34 pub fn exact_slots(&self) -> crate::provider::ProviderProbeId {
35 self.exact_slots
36 }
37}
38
39#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
40#[serde(deny_unknown_fields)]
41pub struct StoreCreationAuthority {
42 pub creation_id: StoreCreationId,
43 pub founder_grant: crate::membership::MembershipGrantId,
44 pub provider_admin_grant: crate::provider::ProviderAdminGrantId,
45 pub probes: StoreCreationProbeIds,
46 pub binding: crate::objects::ResolvedProviderBinding,
47 pub access: crate::provider::ProviderAccessLocator,
48 pub founder_pubkey: String,
49 pub founder_timestamp: String,
50 pub schema_version: u32,
51 pub sync_routing_hash: ObjectHash,
52}
53
54#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
55#[serde(deny_unknown_fields)]
56pub struct StoreRootReservation {
57 pub authority: StoreCreationAuthority,
58 pub root_slot: crate::objects::ObjectSlot,
59}
60
61#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
62#[serde(deny_unknown_fields)]
63pub struct FounderRegistrationReservation {
64 pub root: StoreRootReservation,
65 pub registration_slot: crate::objects::ObjectSlot,
66}
67
68#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
69#[serde(deny_unknown_fields)]
70pub struct MembershipReservation {
71 pub founder: FounderRegistrationReservation,
72 pub first_slot: crate::objects::ObjectSlot,
73}
74
75#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
76#[serde(deny_unknown_fields)]
77pub struct DescriptorReservation {
78 pub membership: MembershipReservation,
79 pub current_publication_slot: crate::objects::ObjectSlot,
80 pub recovery_slot: crate::objects::ObjectSlot,
81}
82
83#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
84#[serde(deny_unknown_fields)]
85pub struct CurrentPublicationReservation {
86 pub membership: MembershipReservation,
87 pub current_publication_slot: crate::objects::ObjectSlot,
88}
89
90#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
91#[serde(deny_unknown_fields)]
92pub struct FounderMembershipPublicationReservation {
93 pub next_head_slot: crate::objects::ObjectSlot,
94}
95
96#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
97#[serde(deny_unknown_fields)]
98pub struct FounderGraphReservation {
99 pub descriptor: DescriptorReservation,
100 pub acknowledgements: DeviceStreamAnchor,
101 pub next_ack_slot: crate::objects::ObjectSlot,
102 pub membership: FounderMembershipPublicationReservation,
103}
104
105#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
106#[serde(deny_unknown_fields)]
107pub struct FounderAcknowledgementsReservation {
108 pub descriptor: DescriptorReservation,
109 pub acknowledgements: DeviceStreamAnchor,
110}
111
112#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
113#[serde(deny_unknown_fields)]
114pub struct FounderNextAckReservation {
115 pub acknowledgements: FounderAcknowledgementsReservation,
116 pub next_ack_slot: crate::objects::ObjectSlot,
117}