Files
smart-home-in-rust-with-hom…/src/home_assistant/home_assistant.rs

44 lines
1.2 KiB
Rust

use pyo3::prelude::*;
use crate::python_utils::{detach, validate_type_by_name};
use super::state_machine::StateMachine;
#[derive(Debug)]
pub struct HomeAssistant(Py<PyAny>);
impl<'source> FromPyObject<'source> for HomeAssistant {
fn extract_bound(ob: &Bound<'source, PyAny>) -> PyResult<Self> {
// 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<String, PyErr> {
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<bool, PyErr> {
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<bool, PyErr> {
let is_stopping = self.0.getattr(*py, "is_stopping")?;
is_stopping.extract(*py)
}
pub fn states(&self, py: &Python) -> Result<StateMachine, PyErr> {
let states = self.0.getattr(*py, "states")?;
states.extract(*py)
}
}