use async_trait::async_trait;
use aws_sdk_s3::types::ChecksumAlgorithm;
use aws_smithy_types::DateTime;
use bitflags::bitflags;
bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct EventType: u64 {
const UNDEFINED = 0u64;
const PIPELINE_START = 1u64 << 1;
const PIPELINE_END = 1u64 << 2;
const SYNC_START = 1u64 << 3;
const SYNC_COMPLETE = 1u64 << 4;
const SYNC_DELETE = 1u64 << 5;
const SYNC_ETAG_VERIFIED = 1u64 << 6;
const SYNC_CHECKSUM_VERIFIED = 1u64 << 7;
const SYNC_ETAG_MISMATCH = 1u64 << 8;
const SYNC_CHECKSUM_MISMATCH = 1u64 << 9;
const SYNC_WARNING = 1u64 << 10;
const PIPELINE_ERROR = 1u64 << 11;
const SYNC_CANCEL = 1u64 << 12;
const SYNC_WRITE = 1u64 << 13;
const SYNC_FILTERED = 1u64 << 14;
const STATS_REPORT = 1u64 << 15;
const ALL_EVENTS = !0;
}
}
#[derive(Default, Debug, Clone)]
pub struct EventData {
pub event_type: EventType,
pub dry_run: bool,
pub key: Option<String>,
pub source_version_id: Option<String>,
pub target_version_id: Option<String>,
pub source_last_modified: Option<DateTime>,
pub target_last_modified: Option<DateTime>,
pub source_size: Option<u64>,
pub target_size: Option<u64>,
pub checksum_algorithm: Option<ChecksumAlgorithm>,
pub source_checksum: Option<String>,
pub target_checksum: Option<String>,
pub source_etag: Option<String>,
pub target_etag: Option<String>,
pub source_content_type: Option<String>,
pub source_user_defined_metadata: Option<String>,
pub source_tagging: Option<String>,
pub byte_written: Option<u64>,
pub upload_id: Option<String>,
pub part_number: Option<u64>,
pub message: Option<String>,
pub stats_transferred_byte: Option<u64>,
pub stats_transferred_byte_per_sec: Option<u64>,
pub stats_transferred_object: Option<u64>,
pub stats_transferred_object_per_sec: Option<u64>,
pub stats_etag_verified: Option<u64>,
pub stats_etag_mismatch: Option<u64>,
pub stats_checksum_verified: Option<u64>,
pub stats_checksum_mismatch: Option<u64>,
pub stats_deleted: Option<u64>,
pub stats_skipped: Option<u64>,
pub stats_error: Option<u64>,
pub stats_warning: Option<u64>,
pub stats_duration_sec: Option<f64>,
}
impl EventData {
pub fn new(event_type: EventType) -> Self {
Self {
event_type,
..Default::default()
}
}
}
#[async_trait]
pub trait EventCallback {
async fn on_event(&mut self, event_data: EventData);
}