mod abandon_file;
mod append_file;
mod create_file;
mod delete_file;
mod finish_file;
mod follow_file;
mod follow_objects;
mod follow_records;
mod follow_stream;
mod query;
mod read_file;
mod resume_file;
mod storage_status;
mod write_file;
mod write_objects;
mod write_records;
mod write_schema;
mod write_streams;
pub use abandon_file::AbandonFile;
pub use append_file::AppendFile;
pub use create_file::CreateFile;
pub use delete_file::DeleteFile;
pub use finish_file::FinishFile;
pub use follow_file::FollowFile;
pub use follow_objects::FollowObjects;
pub use follow_records::{FollowBoundaries, FollowRecords, Followed};
pub use follow_stream::FollowStream;
pub use query::Query;
pub use read_file::ReadFile;
pub use resume_file::ResumeFile;
pub use storage_status::StorageStatus;
pub use write_file::WriteFile;
pub use write_objects::WriteObjects;
pub use write_records::WriteRecords;
pub use write_schema::WriteSchema;
pub use write_streams::WriteStreams;
use std::time::Duration;
use crate::catalog::{Catalog, Contains, Member, Visitor};
use crate::operations::{Backoff, Jitter, OperationPolicy, RestartPolicy, RetryPolicy};
pub const POLICY: OperationPolicy = OperationPolicy {
timeout: Duration::from_secs(60),
attempt_timeout: Duration::from_secs(15),
retries: RetryPolicy::OnTransient {
max_retries: 3,
backoff: Backoff::Exponential {
initial: Duration::from_millis(250),
maximum: Duration::from_secs(2),
jitter: Jitter::Deterministic,
},
},
restart: RestartPolicy::Never,
};
pub const EVERY_SCHEMA: &str = "*";
pub const STREAM_POLICY: OperationPolicy = OperationPolicy { attempt_timeout: POLICY.timeout, retries: RetryPolicy::Never, ..POLICY };
pub const IO_POLICY: OperationPolicy = OperationPolicy {
timeout: crate::operations::UNBOUNDED,
attempt_timeout: crate::operations::UNBOUNDED,
retries: RetryPolicy::Never,
restart: RestartPolicy::Never,
};
macro_rules! catalog {
($($leaf:ident),* $(,)?) => {
pub enum Operations { $($leaf($leaf)),* }
impl<V: Visitor $(+ Member<$leaf>)*> Catalog<V> for Operations {
type Entries = [V::Entry; [$(stringify!($leaf)),*].len()];
const ENTRIES: Self::Entries = [$(<V as Member<$leaf>>::ENTRY),*];
}
$(impl Contains<$leaf> for Operations {})*
};
}
catalog! {
Query,
ReadFile,
FollowRecords,
FollowStream,
FollowFile,
StorageStatus,
ResumeFile,
CreateFile,
AppendFile,
FinishFile,
AbandonFile,
WriteRecords,
WriteStreams,
WriteFile,
DeleteFile,
WriteSchema,
WriteObjects,
FollowObjects,
}