Skip to main content

pulse_pixelstream_types/
control_lock.rs

1use myko::entities::client::{Client, ClientId};
2use myko::prelude::*;
3use myko_macros::myko_item;
4
5use crate::stream::{Stream, StreamId};
6
7/// Ephemeral single-holder control lock per stream. SET overwrites (takeover);
8/// cascade-deleted on holder disconnect (auto-release). One row per stream.
9#[myko_item]
10pub struct ControlLock {
11    #[belongs_to(Stream)]
12    pub stream_id: StreamId,
13    pub viewer_id: String,
14    #[myko_client_id]
15    #[belongs_to(Client)]
16    #[serde(default, skip_serializing_if = "Option::is_none")]
17    pub client_id: Option<ClientId>,
18}
19
20impl ControlLock {
21    pub fn row_id(stream_id: &StreamId) -> ControlLockId {
22        stream_id.0.to_string().into()
23    }
24}