cosmic/
action.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
40
// Copyright 2023 System76 <info@system76.com>
// SPDX-License-Identifier: MPL-2.0

#[cfg(feature = "winit")]
use crate::app;
#[cfg(feature = "single-instance")]
use crate::dbus_activation;

pub const fn app<M>(message: M) -> Action<M> {
    Action::App(message)
}
#[cfg(feature = "winit")]
pub const fn cosmic<M>(message: app::Action) -> Action<M> {
    Action::Cosmic(message)
}

pub const fn none<M>() -> Action<M> {
    Action::None
}

#[derive(Clone, Debug)]
#[must_use]
pub enum Action<M> {
    /// Messages from the application, for the application.
    App(M),
    #[cfg(feature = "winit")]
    /// Internal messages to be handled by libcosmic.
    Cosmic(app::Action),
    #[cfg(feature = "single-instance")]
    /// Dbus activation messages
    DbusActivation(dbus_activation::Message),
    /// Do nothing
    None,
}

impl<M> From<M> for Action<M> {
    fn from(value: M) -> Self {
        Self::App(value)
    }
}