chore: extract python_utils and home-assistant to their own crates

This commit is contained in:
2025-04-21 21:26:14 -04:00
parent e4fd9844cc
commit f8b269b6ce
36 changed files with 76 additions and 40 deletions

View File

@@ -0,0 +1,37 @@
use std::str::FromStr;
use pyo3::{exceptions::PyValueError, PyErr};
use smol_str::SmolStr;
use snafu::Snafu;
#[derive(Debug, Clone, derive_more::Display)]
pub struct Slug(SmolStr);
#[derive(Debug, Clone, Snafu)]
#[snafu(display("expected a lowercase ASCII alphabetical character (i.e. a through z) or a digit (i.e. 0 through 9) or an underscore (i.e. _) but encountered {encountered}"))]
pub struct SlugParsingError {
encountered: char,
}
impl From<SlugParsingError> for PyErr {
fn from(error: SlugParsingError) -> Self {
PyValueError::new_err(error.to_string())
}
}
impl FromStr for Slug {
type Err = SlugParsingError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
for c in s.chars() {
match c {
'a'..='z' => {}
'0'..='9' => {}
'_' => {}
_ => return Err(SlugParsingError { encountered: c }),
}
}
Ok(Self(s.into()))
}
}