use crate::{
core::{hooks::StateHook, State},
util::spawn,
x::XConn,
Result,
};
use std::borrow::Cow;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SpawnOnStartup {
prog: Cow<'static, str>,
}
impl SpawnOnStartup {
pub fn new(prog: impl Into<Cow<'static, str>>) -> Self {
Self { prog: prog.into() }
}
pub fn boxed<X>(prog: impl Into<Cow<'static, str>>) -> Box<dyn StateHook<X>>
where
X: XConn,
{
Box::new(Self::new(prog))
}
}
impl<X> StateHook<X> for SpawnOnStartup
where
X: XConn,
{
fn call(&mut self, _state: &mut State<X>, _x: &X) -> Result<()> {
spawn(self.prog.as_ref())
}
}