use alloc::sync::Arc;
use crate::codec::CodecConfig;
use crate::corpus::compression_policy::CompressionPolicy;
use crate::types::{CorpusId, Timestamp, VectorId};
#[derive(Clone, Debug)]
pub enum CorpusEvent {
Created {
corpus_id: CorpusId,
codec_config: CodecConfig,
compression_policy: CompressionPolicy,
timestamp: Timestamp,
},
VectorsInserted {
corpus_id: CorpusId,
vector_ids: Arc<[VectorId]>,
count: u32,
timestamp: Timestamp,
},
Decompressed {
corpus_id: CorpusId,
vector_count: u32,
timestamp: Timestamp,
},
PolicyViolationDetected {
corpus_id: CorpusId,
kind: ViolationKind,
detail: Arc<str>,
timestamp: Timestamp,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum ViolationKind {
ConfigMismatch,
PolicyConflict,
DuplicateId,
DimensionMismatch,
}
impl ViolationKind {
#[must_use]
pub const fn as_python_tag(self) -> &'static str {
match self {
Self::ConfigMismatch => "config_mismatch",
Self::PolicyConflict => "policy_conflict",
Self::DuplicateId => "duplicate_id",
Self::DimensionMismatch => "dimension_mismatch",
}
}
}