use pyo3::prelude::*; use crate::python_utils::{detach, validate_type_by_name}; use super::state_machine::StateMachine; #[derive(Debug)] pub struct HomeAssistant(Py); impl<'source> FromPyObject<'source> for HomeAssistant { fn extract_bound(ob: &Bound<'source, PyAny>) -> PyResult { // region: Validation validate_type_by_name(ob, "HomeAssistant")?; // endregion: Validation Ok(Self(detach(ob))) } } impl HomeAssistant { /// Return the representation pub fn repr(&self, py: &Python) -> Result { let bound = self.0.bind(*py); let repr = bound.repr()?; repr.extract() } /// Return if Home Assistant is running. pub fn is_running(&self, py: &Python) -> Result { let is_running = self.0.getattr(*py, "is_running")?; is_running.extract(*py) } /// Return if Home Assistant is stopping. pub fn is_stopping(&self, py: &Python) -> Result { let is_stopping = self.0.getattr(*py, "is_stopping")?; is_stopping.extract(*py) } pub fn states(&self, py: &Python) -> Result { let states = self.0.getattr(*py, "states")?; states.extract(*py) } }