Skip to main content

dnspls_snapshot/
lib.rs

1//! Truth-safe local snapshot classification primitives.
2
3use serde::{Deserialize, Serialize};
4
5pub use dnspls_core::ZoneMembership;
6
7/// Local bulk-screen classification; absence always requires live verification.
8#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
9#[serde(rename_all = "snake_case")]
10pub enum SnapshotClassification {
11    RegisteredEvidence,
12    Verify,
13    Uncovered,
14}
15
16/// Converts exact zone membership into the only classifications the local
17/// engine is permitted to return.
18pub const fn classify(membership: ZoneMembership) -> SnapshotClassification {
19    match membership {
20        ZoneMembership::Present => SnapshotClassification::RegisteredEvidence,
21        ZoneMembership::Absent => SnapshotClassification::Verify,
22        ZoneMembership::TldUncovered => SnapshotClassification::Uncovered,
23    }
24}
25
26#[cfg(test)]
27mod tests {
28    use super::*;
29
30    #[test]
31    fn absence_never_becomes_availability() {
32        assert_eq!(
33            classify(ZoneMembership::Absent),
34            SnapshotClassification::Verify
35        );
36    }
37}