use super::{Chunking, ProcessingOptions, WriteOptions};
use crate::crypto::{PrivateKey, PublicKey};
use crate::error::PithosError;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum AppendDurability {
Flush,
SyncAll,
}
pub struct AppendOptions {
pub(crate) access_key: PrivateKey,
pub(crate) recipients: Vec<PublicKey>,
pub(crate) chunking: Chunking,
pub(crate) durability: AppendDurability,
pub(crate) processing: ProcessingOptions,
}
impl AppendOptions {
pub fn new(access_key: PrivateKey, recipients: Vec<PublicKey>) -> Self {
Self {
access_key,
recipients,
chunking: Chunking::default(),
durability: AppendDurability::Flush,
processing: ProcessingOptions::append_default(),
}
}
pub fn with_chunking(mut self, chunking: Chunking) -> Self {
self.chunking = chunking;
self
}
pub fn with_durability(mut self, durability: AppendDurability) -> Self {
self.durability = durability;
self
}
pub fn with_processing(mut self, processing: ProcessingOptions) -> Self {
self.processing = processing;
self
}
pub fn processing(&self) -> ProcessingOptions {
self.processing
}
pub(crate) fn validate_recipients(&self) -> Result<(), PithosError> {
WriteOptions::new(self.access_key.duplicate(), self.recipients.clone()).validate()
}
pub(crate) fn recipients_with_access_key(&self) -> Vec<PublicKey> {
let access_public = self.access_key.public_key();
let mut recipients = self.recipients.clone();
if !recipients.contains(&access_public) {
recipients.push(access_public);
}
recipients
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct AppendObservation {
pub source_read_count: u64,
pub source_read_bytes: u64,
pub base_archive_bytes: u64,
pub final_archive_bytes: u64,
}