harmos_domain/operations/storage/
mod.rs1mod abandon_file;
16mod append_file;
17mod capture_file;
18mod create_file;
19mod delete_file;
20mod finish_file;
21mod follow_file;
22mod follow_objects;
23mod follow_production;
24mod follow_records;
25mod follow_stream;
26mod hash_file;
27mod list_directory;
28mod query;
29mod read_file;
30mod resume_file;
31mod storage_status;
32mod watch_directory;
33mod write_file;
34mod write_objects;
35mod write_records;
36mod write_schema;
37mod write_streams;
38
39pub use abandon_file::AbandonFile;
42pub use append_file::AppendFile;
43pub use capture_file::CaptureFile;
44pub use create_file::CreateFile;
45pub use delete_file::DeleteFile;
46pub use finish_file::FinishFile;
47pub use follow_file::FollowFile;
48pub use follow_objects::FollowObjects;
49pub use follow_production::FollowProduction;
50pub use follow_records::{FollowBoundaries, FollowRecords, Followed};
51pub use follow_stream::FollowStream;
52pub use hash_file::HashFile;
53pub use list_directory::ListDirectory;
54pub use query::Query;
55pub use read_file::ReadFile;
56pub use resume_file::ResumeFile;
57pub use storage_status::StorageStatus;
58pub use watch_directory::WatchDirectory;
59pub use write_file::WriteFile;
60pub use write_objects::WriteObjects;
61pub use write_records::WriteRecords;
62pub use write_schema::WriteSchema;
63pub use write_streams::WriteStreams;
64
65use std::time::Duration;
69use crate::catalog::{Catalog, Contains, Member, Visitor};
73use crate::operations::{Backoff, Jitter, OperationPolicy, RestartPolicy, RetryPolicy};
74
75pub const POLICY: OperationPolicy = OperationPolicy {
78 timeout: Duration::from_secs(60),
79 attempt_timeout: Duration::from_secs(15),
80 retries: RetryPolicy::OnTransient {
81 max_retries: 3,
82 backoff: Backoff::Exponential {
83 initial: Duration::from_millis(250),
84 maximum: Duration::from_secs(2),
85 jitter: Jitter::Deterministic,
86 },
87 },
88 restart: RestartPolicy::Never,
89};
90
91pub const EVERY_SCHEMA: &str = "*";
92
93pub const STREAM_POLICY: OperationPolicy = OperationPolicy { attempt_timeout: POLICY.timeout, retries: RetryPolicy::Never, ..POLICY };
94
95pub const IO_POLICY: OperationPolicy = OperationPolicy {
96 timeout: crate::operations::UNBOUNDED,
97 attempt_timeout: crate::operations::UNBOUNDED,
98 retries: RetryPolicy::Never,
99 restart: RestartPolicy::Never,
100};
101
102macro_rules! catalog {
105 ($($leaf:ident),* $(,)?) => {
106 pub enum Operations { $($leaf($leaf)),* }
107 impl<V: Visitor $(+ Member<$leaf>)*> Catalog<V> for Operations {
108 type Entries = [V::Entry; [$(stringify!($leaf)),*].len()];
109 const ENTRIES: Self::Entries = [$(<V as Member<$leaf>>::ENTRY),*];
110 }
111 $(impl Contains<$leaf> for Operations {})*
112 };
113}
114
115catalog! {
116 ListDirectory,
117 WatchDirectory,
118 Query,
119 ReadFile,
120 HashFile,
121 CaptureFile,
122 FollowProduction,
123 FollowRecords,
124 FollowStream,
125 FollowFile,
126 StorageStatus,
127 ResumeFile,
128 CreateFile,
129 AppendFile,
130 FinishFile,
131 AbandonFile,
132 WriteRecords,
133 WriteStreams,
134 WriteFile,
135 DeleteFile,
136 WriteSchema,
137 WriteObjects,
138 FollowObjects,
139}
140
141