use std::sync::mpsc;
use crate::Error;
use crate::ServiceEvent;
cfg_if! {
if #[cfg(windows)] {
mod windows;
pub use self::windows::WindowsController as Controller;
pub use self::windows::Session as Session;
pub use self::windows::dispatch;
} else if #[cfg(target_os = "macos")] {
mod macos;
pub use self::macos::MacosController as Controller;
pub use self::macos::Session as Session;
pub use self::macos::dispatch;
pub use self::macos::LaunchAgentTargetSesssion;
} else if #[cfg(target_os = "linux")] {
mod linux;
pub use self::linux::LinuxController as Controller;
pub use self::linux::Session as Session;
pub use self::linux::dispatch;
} else {
mod dummy;
pub use self::dummy::DummyController as Controller;
pub use self::dummy::Session as Session;
}
}
pub type ServiceMainFn<T> = fn(
rx: mpsc::Receiver<ServiceEvent<T>>,
tx: mpsc::Sender<ServiceEvent<T>>,
args: Vec<String>,
standalone_mode: bool,
) -> u32;
pub trait ControllerInterface {
fn create(&mut self) -> Result<(), Error>;
fn delete(&mut self) -> Result<(), Error>;
fn start(&mut self) -> Result<(), Error>;
fn stop(&mut self) -> Result<(), Error>;
cfg_if! {
if #[cfg(target_os = "macos")] {
fn load(&mut self) -> Result<(), Error>;
fn unload(&mut self) -> Result<(), Error>;
}
}
}