Improvements for api
Better error handling, focused on using in other crates
This commit is contained in:
parent
26ab019c26
commit
89a8cad693
|
@ -6,7 +6,5 @@ edition = "2021"
|
|||
[profile.release]
|
||||
strip = true
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
x11 = { version = "2.20.0", features = ["xss", "xlib"] }
|
||||
|
|
44
src/lib.rs
44
src/lib.rs
|
@ -1,7 +1,7 @@
|
|||
mod xinterface {
|
||||
use std::ffi::c_void;
|
||||
use x11::xlib::{XCloseDisplay, XDefaultRootWindow, XFree, XOpenDisplay};
|
||||
use x11::xss::{XScreenSaverAllocInfo, XScreenSaverQueryExtension, XScreenSaverQueryInfo};
|
||||
use std::ffi::c_void;
|
||||
|
||||
pub struct Display {
|
||||
display_ptr: *mut x11::xlib::Display,
|
||||
|
@ -24,11 +24,8 @@ mod xinterface {
|
|||
let mut event_basep: i32 = 0;
|
||||
let mut error_basep: i32 = 0;
|
||||
unsafe {
|
||||
XScreenSaverQueryExtension(
|
||||
self.display_ptr,
|
||||
&mut event_basep,
|
||||
&mut error_basep
|
||||
) != 0
|
||||
XScreenSaverQueryExtension(self.display_ptr, &mut event_basep, &mut error_basep)
|
||||
!= 0
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -79,21 +76,32 @@ mod xinterface {
|
|||
|
||||
use xinterface::Display;
|
||||
|
||||
pub fn get_idle_time() -> u64 {
|
||||
let display = Display::open().unwrap_or_else(|_| {
|
||||
println!("Cannot open display");
|
||||
std::process::exit(1);
|
||||
});
|
||||
pub enum Error {
|
||||
CannotOpenDisplay,
|
||||
NoScreenSaverExtension,
|
||||
CannotGetScreenSaverinfo,
|
||||
}
|
||||
|
||||
impl Error {
|
||||
pub fn message(&self) -> &'static str {
|
||||
match self {
|
||||
Self::CannotOpenDisplay => "Cannot open display",
|
||||
Self::NoScreenSaverExtension => "Screen doesn't have screen saver extension",
|
||||
Self::CannotGetScreenSaverinfo => "Cannot get screen saver info",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_idle_time() -> Result<u64, Error> {
|
||||
let display = Display::open().or(Err(Error::CannotOpenDisplay))?;
|
||||
|
||||
if !display.has_screen_saver_extesnsion() {
|
||||
println!("Screen doesn't have screen saver extension");
|
||||
std::process::exit(1);
|
||||
return Err(Error::NoScreenSaverExtension);
|
||||
}
|
||||
|
||||
let screen_saver_info = display.get_screen_saver_info().unwrap_or_else(|_| {
|
||||
println!("Cannot get screen saver info");
|
||||
std::process::exit(1);
|
||||
});
|
||||
let screen_saver_info = display
|
||||
.get_screen_saver_info()
|
||||
.or(Err(Error::CannotGetScreenSaverinfo))?;
|
||||
|
||||
screen_saver_info.idle_time()
|
||||
Ok(screen_saver_info.idle_time())
|
||||
}
|
||||
|
|
12
src/main.rs
12
src/main.rs
|
@ -1,3 +1,11 @@
|
|||
fn main() {
|
||||
println!("{}", rs_idle::get_idle_time());
|
||||
fn error(error: rs_idle::Error) -> ! {
|
||||
println!("{}", error.message());
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
fn main() {
|
||||
println!(
|
||||
"{}",
|
||||
rs_idle::get_idle_time().unwrap_or_else(|e| { error(e) })
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue