Skip to main content

sightloom_core/
ids.rs

1//! Typed identifiers shared across `SightLoom` crates.
2
3/// A model-specific class identifier.
4#[repr(transparent)]
5#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
6pub struct ClassId(pub u16);
7
8/// A track identifier local to a single media source / tracker instance.
9///
10/// Local ids are **not** globally unique across cameras. Use [`TrackKey`] or
11/// [`TrackUid`] when identity must span sources.
12#[repr(transparent)]
13#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
14pub struct TrackId(pub u32);
15
16/// Local track id alias for multi-source APIs.
17pub type LocalTrackId = TrackId;
18
19/// An application-specific zone identifier.
20#[repr(transparent)]
21#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
22pub struct ZoneId(pub u16);
23
24/// A media source (camera, file, stream) identifier.
25#[repr(transparent)]
26#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
27pub struct SourceId(pub u32);
28
29/// Composite key uniquely identifying a local track within one source.
30#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
31pub struct TrackKey {
32    /// Media source that owns the local track id space.
33    pub source_id: SourceId,
34    /// Tracker-local id inside that source.
35    pub local_track_id: LocalTrackId,
36}
37
38impl TrackKey {
39    /// Creates a composite track key.
40    #[must_use]
41    pub const fn new(source_id: SourceId, local_track_id: LocalTrackId) -> Self {
42        Self {
43            source_id,
44            local_track_id,
45        }
46    }
47}
48
49/// Globally unique track identifier across all sources in a session.
50#[repr(transparent)]
51#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
52pub struct TrackUid(pub u64);
53
54/// A unique observation identifier within a processing context.
55#[repr(transparent)]
56#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
57pub struct ObservationId(pub u64);
58
59/// A stable subject / identity identifier linked across tracks.
60#[repr(transparent)]
61#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
62pub struct SubjectId(pub u64);
63
64/// An opaque handle to stored evidence (frame crop, reel, sidecar blob).
65#[repr(transparent)]
66#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
67pub struct EvidenceRef(pub u64);
68
69/// An opaque handle to a compact mask stored out-of-line.
70#[repr(transparent)]
71#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
72pub struct MaskRef(pub u64);
73
74/// An opaque handle to an embedding vector stored out-of-line.
75#[repr(transparent)]
76#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
77pub struct EmbeddingRef(pub u64);
78
79/// An opaque handle to a keypoint set stored out-of-line.
80#[repr(transparent)]
81#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
82pub struct KeypointSetRef(pub u64);
83
84/// A unique event identifier inside a `VisionIndex` document.
85#[repr(transparent)]
86#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
87pub struct EventId(pub u64);
88
89/// A unique appearance identifier (one continuous sighting of a subject).
90#[repr(transparent)]
91#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
92pub struct AppearanceId(pub u64);
93
94/// A unique visit identifier (subject presence in a scene or zone window).
95#[repr(transparent)]
96#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
97pub struct VisitId(pub u64);
98
99/// A unique pattern identifier produced by analysis.
100#[repr(transparent)]
101#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
102pub struct PatternId(pub u64);
103
104/// A unique anomaly identifier produced by analysis.
105#[repr(transparent)]
106#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
107pub struct AnomalyId(pub u64);