1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
use color_field::ColorField;
use serde::{Deserialize, Serialize};
pub mod color_field;
/// type representing a field in the mustache template
///
/// see <https://github.com/chriskempson/base16/blob/main/builder.md#template-tags>
///
/// # Examples
///
/// ```rust
/// use base16_color_scheme::template::{
/// color_field::{ColorField, Format, Hex},
/// TemplateField,
/// };
///
/// assert_eq!(
/// TemplateField::parse_field("scheme-name"),
/// TemplateField::SchemeName
/// );
/// assert_eq!(
/// TemplateField::parse_field("scheme-author"),
/// TemplateField::SchemeAuthor
/// );
/// assert_eq!(
/// TemplateField::parse_field("scheme-slug"),
/// TemplateField::SchemeSlug
/// );
/// assert_eq!(
/// TemplateField::parse_field("base07-hex-r"),
/// TemplateField::ColorField(ColorField {
/// number: 0x07,
/// format: Format::Hex(Hex::R)
/// })
/// )
/// ```
#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum TemplateField {
/// this variant is returned for `scheme-name` and `scheme`
SchemeName,
/// this variant is returned for `scheme-author`
SchemeAuthor,
/// this variant is returned for `scheme-slug`
SchemeSlug,
/// this variant is returned for a color description
///
/// see [`ColorField`](color_field::ColorField) and [`Format`](color_field::Format) for details
ColorField(ColorField),
/// this variant is returned if the parsed string is invalid
UnparsableField,
}
impl TemplateField {
pub fn parse_field(name: &str) -> Self {
match name {
"scheme-name" | "scheme" => Self::SchemeName,
"scheme-author" => Self::SchemeAuthor,
"scheme-slug" => Self::SchemeSlug,
_ => {
if let Ok(field_spec) = name.parse() {
Self::ColorField(field_spec)
} else {
Self::UnparsableField
}
}
}
}
}