live_provenance: name the track's media kind TrackKind #397

Merged
dcharlot merged 1 commit from fix/track-kind-name into main 2026-10-21 16:06:26 -04:00

View file

@ -376,9 +376,9 @@ fn manifest_uuid(s: &str) -> Option<&str> {
ok.then_some(u)
}
/// A media kind of live-rooms §6.1.
/// A track's media kind, live-rooms §6.1.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum MediaKind {
pub enum TrackKind {
Audio,
Video,
Screen,
@ -386,7 +386,7 @@ pub enum MediaKind {
/// The media kind of a track's rendering `<room>-<owner>-<kind>--<layer>` (§5.1), whose
/// room field is `room`.
pub fn track_kind(track: &str, room: &[u8; 32]) -> Option<MediaKind> {
pub fn track_kind(track: &str, room: &[u8; 32]) -> Option<TrackKind> {
let (ns, layer) = track.split_once("--")?;
let layer_ok = !layer.is_empty() && layer.bytes().all(|c| c.is_ascii_digit()) && (layer == "0" || !layer.starts_with('0'));
let f: Vec<&str> = ns.split('-').collect();
@ -397,9 +397,9 @@ pub fn track_kind(track: &str, room: &[u8; 32]) -> Option<MediaKind> {
return None;
}
match *kind {
"audio" => Some(MediaKind::Audio),
"video" => Some(MediaKind::Video),
"screen" => Some(MediaKind::Screen),
"audio" => Some(TrackKind::Audio),
"video" => Some(TrackKind::Video),
"screen" => Some(TrackKind::Screen),
_ => None,
}
}
@ -645,7 +645,7 @@ pub fn disclosure(id: &Identity) -> (&'static str, Vec<([u8; 32], bool)>) {
Identity::Track(s) => match &s.label {
Label::Own { origin: o, model } => {
let term = match (*o, track_kind(&s.track, &s.room)) {
(origin::HUMAN, Some(MediaKind::Screen)) => "screenCapture",
(origin::HUMAN, Some(TrackKind::Screen)) => "screenCapture",
(origin::HUMAN, _) => "digitalCapture",
(origin::MACHINE, _) => "trainedAlgorithmicMedia",
_ => "compositeWithTrainedAlgorithmicMedia",
@ -654,7 +654,7 @@ pub fn disclosure(id: &Identity) -> (&'static str, Vec<([u8; 32], bool)>) {
}
Label::Inputs(v) => {
let capture = |i: &Input| {
i.origin == origin::HUMAN && matches!(track_kind(&i.track, &s.room), Some(MediaKind::Audio | MediaKind::Video))
i.origin == origin::HUMAN && matches!(track_kind(&i.track, &s.room), Some(TrackKind::Audio | TrackKind::Video))
};
let term = if v.iter().all(capture) {
"compositeCapture"
@ -1777,8 +1777,8 @@ mod tests {
fn a_track_rendering_names_its_kind() {
let room = [0xab; 32];
let r = hex(&room);
assert_eq!(track_kind(&format!("{r}-{}-video--0", hex(&[1; 32])), &room), Some(MediaKind::Video));
assert_eq!(track_kind(&format!("{r}-_stage-screen--1"), &room), Some(MediaKind::Screen));
assert_eq!(track_kind(&format!("{r}-{}-video--0", hex(&[1; 32])), &room), Some(TrackKind::Video));
assert_eq!(track_kind(&format!("{r}-_stage-screen--1"), &room), Some(TrackKind::Screen));
assert_eq!(track_kind(&format!("{r}-_stage-events--0"), &room), None);
assert_eq!(track_kind(&format!("{r}-_stage-video--01"), &room), None);
assert_eq!(track_kind(&format!("{}-_stage-video--0", hex(&[0xac; 32])), &room), None);