use std::{convert::Infallible, str::FromStr}; use python_utils::{FromPyFromStr, ToStrToPy}; pub mod error_state; pub mod unexpected_state; pub use error_state::ErrorState; pub use unexpected_state::UnexpectedState; #[derive(Debug, Clone, derive_more::Display, FromPyFromStr, ToStrToPy)] pub enum HomeAssistantState { Ok(State), Err(ErrorState), Unexpected(UnexpectedState), } impl From for HomeAssistantState where State: FromStr, { fn from(s: String) -> Self { if let Ok(ok) = State::from_str(&s) { return HomeAssistantState::Ok(ok); } if let Ok(error) = ErrorState::from_str(&s) { return HomeAssistantState::Err(error); } HomeAssistantState::Unexpected(UnexpectedState(s.into())) } } impl FromStr for HomeAssistantState { type Err = Infallible; fn from_str(s: &str) -> Result::Err> { if let Ok(ok) = State::from_str(s) { return Ok(HomeAssistantState::Ok(ok)); } if let Ok(error) = ErrorState::from_str(s) { return Ok(HomeAssistantState::Err(error)); } Ok(HomeAssistantState::Unexpected(UnexpectedState(s.into()))) } }