1#[cfg(feature = "serde")]
2use serde::{Deserialize, Serialize};
3#[cfg(feature = "strum")]
4use strum::{Display, EnumString};
5
6#[cfg(target_os = "linux")]
7pub use self::linux::get_os_info;
8#[cfg(target_os = "macos")]
9pub use self::macos::get_os_info;
10#[cfg(target_os = "windows")]
11pub use self::windows::get_os_info;
12
13#[cfg(target_os = "linux")]
14mod linux;
15#[cfg(target_os = "macos")]
16mod macos;
17#[cfg(target_os = "windows")]
18mod windows;
19
20#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
21#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
22#[cfg_attr(feature = "strum", derive(Display, EnumString))]
23#[derive(Debug, Clone, Copy, PartialEq, Eq)]
24pub enum OsKind {
25 Linux,
26 Macos,
27 Windows,
28}
29
30#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
31#[derive(Debug, Clone)]
32pub struct OsInfo {
33 pub kind: OsKind,
34 pub name: Option<String>,
35 pub version: Option<String>,
36}