pub mod components;
pub mod delete;
pub mod error;
pub mod extend_from_css;
pub mod extend_from_style;
pub mod macros;
pub mod remove_keys;
mod generate_random_identity;
mod render;
#[cfg(test)]
mod tests;
use crate::error::WasmCssError;
use components::Components;
use error::format_error;
use generate_random_identity::generate_random_identity;
#[derive(Debug, Clone, PartialEq)]
pub struct Style {
pub css: String,
css_name: String,
components: Components,
}
impl Style {
pub fn new(css: &str, css_name: Option<&str>) -> Result<Self, WasmCssError> {
if css_name.is_some_and(|i| i.is_empty()) {
return Err(format_error!(
"A Styles css_name cannot be empty. Use: `body`, `.class`, `#id`, ect."
));
}
let css_name = css_name
.map(|id| id.to_string())
.unwrap_or(format!(".{}", generate_random_identity()?));
let components = Components::from_css(css);
let _self = Self {
css: components.to_css(&css_name),
css_name,
components,
};
_self.render()?;
Ok(_self)
}
pub fn identity(&self) -> &str {
if self.css_name.starts_with('#') || self.css_name.starts_with('.') {
self.css_name.split_at(1).1
} else {
&self.css_name
}
}
}