freya_devtools_app/
state.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use std::{
    collections::{
        HashMap,
        HashSet,
    },
    sync::Arc,
};

use dioxus_radio::prelude::*;
use freya_devtools::NodeInfo;
use freya_native_core::prelude::NodeId;
use futures_util::stream::SplitSink;
use tokio::{
    net::TcpStream,
    sync::Mutex,
};
use tokio_tungstenite::{
    MaybeTlsStream,
    WebSocketStream,
    tungstenite::Message,
};

pub type WebSocket = SplitSink<WebSocketStream<MaybeTlsStream<TcpStream>>, Message>;

pub struct DevtoolsState {
    pub(crate) nodes: HashMap<u64, Vec<NodeInfo>>,
    pub(crate) expanded_nodes: HashSet<(u64, NodeId)>,
    pub(crate) client: Arc<Mutex<Option<WebSocket>>>,
    pub(crate) animation_speed: f32,
}

#[derive(PartialEq, Eq, Clone, Debug, Hash)]
pub enum DevtoolsChannel {
    Global,
    UpdatedDOM,
    Misc,
}

impl RadioChannel<DevtoolsState> for DevtoolsChannel {}