wallpaper_rs/lib.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 41 42 43 44 45 46
// THIS MODULE HANDLES THE SETTING AND GETTING
// OF THE WALLPAPER
use std::error::Error;
use std::path::PathBuf;
// Only one of these three sets gets compiled based on the
// OS being run on
#[cfg(target_os = "linux")]
mod linux;
#[cfg(target_os = "linux")]
pub use linux::DesktopEnvt;
#[cfg(target_os = "macos")]
mod macos;
#[cfg(target_os = "macos")]
pub use macos::DesktopEnvt;
#[cfg(target_os = "windows")]
mod windows;
#[cfg(target_os = "windows")]
pub use windows::DesktopEnvt;
/// A trait implemented by desktop environments. It allows setting or getting a wallpaper.
///
/// On platforms where only one desktop environment exists (e.g. Windows, macOS), this can
/// be implemented with a zero-sized type. On Linux, it is an enum.
pub trait Desktop: Sized {
/// Creates a new instance of this desktop.
///
/// On Linux, this function detects the desktop environment.
/// It panics if the desktop environment is unsupported. It returns an error
/// if the desktop environment couldn't be determined (i.e., the `XDG_CURRENT_DESKTOP`
/// environment variable isn't set).
fn new() -> Result<Self, Box<dyn Error>>;
/// Sets the wallpaper for all computer screens to the specified file path.
///
/// The file should be an image file supported by the patform, e.g. a JPEG.
fn set_wallpaper(&self, path: &str) -> Result<(), Box<dyn Error>>;
/// Returns the file path to the image used as the wallpaper.
///
/// If different screens have different wallpapers, only one of them is returned;
/// the behavior depends on the platform and desktop environment.
fn get_wallpaper(&self) -> Result<PathBuf, Box<dyn Error>>;
}