lightws/stream/
ctrl.rs

1use super::Stream;
2use super::state::WriteState;
3
4use crate::frame::Mask;
5use crate::role::RoleHelper;
6use crate::error::CtrlError;
7
8impl<IO, Role, Guard> Stream<IO, Role, Guard>
9where
10    Role: RoleHelper,
11{
12    /// Get mask for upcoming writes.
13    #[inline]
14    pub fn mask_key(&self) -> Mask { self.role.mask_key() }
15
16    /// Set mask for upcoming writes.
17    /// An attempt to set mask during a write will fail with [`CtrlError::SetMaskInWrite`].
18    #[inline]
19    pub fn set_mask_key(&mut self, key: [u8; 4]) -> Result<(), CtrlError> {
20        // make sure this is a new fresh write
21        if let WriteState::WriteHead(head) = self.write_state {
22            if head.is_empty() {
23                self.role.set_mask_key(key);
24                return Ok(());
25            }
26        }
27        Err(CtrlError::SetMaskInWrite)
28    }
29}