Skip to main content

harmos_domain/operations/storage/
mod.rs

1/* ***
2 *
3 * Harmos
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 *
7 * ***
8 */
9
10// The Closed Catalog Of Storage Operation Declarations. The Runtime Binds
11// Each Declaration To Its Storage Handler.
12
13/* === Modules === */
14
15mod abandon_file;
16mod append_file;
17mod create_file;
18mod delete_file;
19mod finish_file;
20mod follow_file;
21mod follow_objects;
22mod follow_records;
23mod follow_stream;
24mod query;
25mod read_file;
26mod resume_file;
27mod storage_status;
28mod write_file;
29mod write_objects;
30mod write_records;
31mod write_schema;
32mod write_streams;
33
34/* === Re-Exports === */
35
36pub use abandon_file::AbandonFile;
37pub use append_file::AppendFile;
38pub use create_file::CreateFile;
39pub use delete_file::DeleteFile;
40pub use finish_file::FinishFile;
41pub use follow_file::FollowFile;
42pub use follow_objects::FollowObjects;
43pub use follow_records::{FollowBoundaries, FollowRecords, Followed};
44pub use follow_stream::FollowStream;
45pub use query::Query;
46pub use read_file::ReadFile;
47pub use resume_file::ResumeFile;
48pub use storage_status::StorageStatus;
49pub use write_file::WriteFile;
50pub use write_objects::WriteObjects;
51pub use write_records::WriteRecords;
52pub use write_schema::WriteSchema;
53pub use write_streams::WriteStreams;
54
55/* === Imports === */
56
57// Standard Library Imports
58use std::time::Duration;
59// Third Party Imports
60
61// Local Imports
62use crate::catalog::{Catalog, Contains, Member, Visitor};
63use crate::operations::{Backoff, Jitter, OperationPolicy, RestartPolicy, RetryPolicy};
64
65/* === Constants === */
66
67pub const POLICY: OperationPolicy = OperationPolicy {
68    timeout: Duration::from_secs(60),
69    attempt_timeout: Duration::from_secs(15),
70    retries: RetryPolicy::OnTransient {
71        max_retries: 3,
72        backoff: Backoff::Exponential {
73            initial: Duration::from_millis(250),
74            maximum: Duration::from_secs(2),
75            jitter: Jitter::Deterministic,
76        },
77    },
78    restart: RestartPolicy::Never,
79};
80
81pub const EVERY_SCHEMA: &str = "*";
82
83pub const STREAM_POLICY: OperationPolicy = OperationPolicy { attempt_timeout: POLICY.timeout, retries: RetryPolicy::Never, ..POLICY };
84
85pub const IO_POLICY: OperationPolicy = OperationPolicy {
86    timeout: crate::operations::UNBOUNDED,
87    attempt_timeout: crate::operations::UNBOUNDED,
88    retries: RetryPolicy::Never,
89    restart: RestartPolicy::Never,
90};
91
92/* === Macros === */
93
94macro_rules! catalog {
95    ($($leaf:ident),* $(,)?) => {
96        pub enum Operations { $($leaf($leaf)),* }
97        impl<V: Visitor $(+ Member<$leaf>)*> Catalog<V> for Operations {
98            type Entries = [V::Entry; [$(stringify!($leaf)),*].len()];
99            const ENTRIES: Self::Entries = [$(<V as Member<$leaf>>::ENTRY),*];
100        }
101        $(impl Contains<$leaf> for Operations {})*
102    };
103}
104
105catalog! {
106    Query,
107    ReadFile,
108    FollowRecords,
109    FollowStream,
110    FollowFile,
111    StorageStatus,
112    ResumeFile,
113    CreateFile,
114    AppendFile,
115    FinishFile,
116    AbandonFile,
117    WriteRecords,
118    WriteStreams,
119    WriteFile,
120    DeleteFile,
121    WriteSchema,
122    WriteObjects,
123    FollowObjects,
124}
125
126/* === Type Aliases === */
127
128/* === Structs === */
129
130/* === Enums === */
131
132/* === Traits === */
133
134/* === Implementations === */
135
136/* === Public Functions === */
137
138/* === Private Functions === */
139
140/* === Tests === */