diff options
Diffstat (limited to 'native/src/system')
| -rw-r--r-- | native/src/system/action.rs | 37 | ||||
| -rw-r--r-- | native/src/system/information.rs | 12 | 
2 files changed, 47 insertions, 2 deletions
| diff --git a/native/src/system/action.rs b/native/src/system/action.rs index 0d484957..3bece0bb 100644 --- a/native/src/system/action.rs +++ b/native/src/system/action.rs @@ -1,3 +1,36 @@ +use crate::system; + +use iced_futures::MaybeSend; + +use std::fmt; +  /// An operation to be performed on the system. -#[derive(Debug)] -pub enum Action {} +pub enum Action<T> { +    /// Query system information and produce `T` with the result. +    QueryInformation(Box<dyn Fn(Option<system::Information>) -> T>), +} + +impl<T> Action<T> { +    /// Maps the output of a system [`Action`] using the provided closure. +    pub fn map<A>( +        self, +        f: impl Fn(T) -> A + 'static + MaybeSend + Sync, +    ) -> Action<A> +    where +        T: 'static, +    { +        match self { +            Self::QueryInformation(o) => { +                Action::QueryInformation(Box::new(move |s| f(o(s)))) +            } +        } +    } +} + +impl<T> fmt::Debug for Action<T> { +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { +        match self { +            Self::QueryInformation(_) => write!(f, "Action::QueryInformation"), +        } +    } +} diff --git a/native/src/system/information.rs b/native/src/system/information.rs new file mode 100644 index 00000000..2100d110 --- /dev/null +++ b/native/src/system/information.rs @@ -0,0 +1,12 @@ +/// Contains informations about the system (e.g. system name, processor, memory, graphics adapter). +#[derive(Debug)] +pub struct Information { +    system_name: String, +    system_kernel: String, +    system_version: String, +    cpu_brand: String, +    cpu_vendor: String, +    cpu_name: String, +    cpu_cores: String, +    memory_total: String, +} | 
