bui_backend_types/
lib.rs

1//! types shared between frontend and backend of the `bui-backend` crate
2#![cfg_attr(docsrs, feature(doc_cfg))]
3
4#![deny(missing_docs)]
5
6use serde::{Serialize, Deserialize};
7
8/// Identifier for each session (one per client browser).
9#[derive(Serialize, Deserialize, Debug, Clone, Copy, Eq, PartialEq, Hash)]
10pub struct SessionKey(pub uuid::Uuid);
11
12#[cfg(feature="uuid-v4")]
13impl SessionKey {
14    /// Create a new SessionKey
15    #[cfg_attr(docsrs, doc(cfg(feature = "uuid-v4")))]
16    pub fn new() -> Self {
17        SessionKey(uuid::Uuid::new_v4())
18    }
19}
20
21/// Identifier for each connected event stream listener (one per client tab).
22#[derive(Serialize, Deserialize, Debug, Clone, Copy, Eq, PartialEq, Hash)]
23pub struct ConnectionKey(pub u32);
24
25/// Callback data from a connected client.
26#[derive(Clone, Debug)]
27pub struct CallbackDataAndSession<T> {
28    /// The callback data sent from the client.
29    pub payload: T,
30    /// The session key associated with the client.
31    pub session_key: SessionKey,
32}
33
34/// A token which can be required to gain access to HTTP API
35#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
36pub enum AccessToken {
37    /// No token needed (access must be controlled via other means).
38    NoToken,
39    /// A pre-shared token to gain access.
40    PreSharedToken(String),
41}
42
43impl AccessToken {
44    /// Check if input string matches.
45    pub fn does_match(&self, test_str: &str) -> bool {
46        match self {
47            &AccessToken::NoToken => true,
48            &AccessToken::PreSharedToken(ref s) => s==test_str,
49        }
50    }
51}