Skip to main content

oak_handlebars/language/
mod.rs

1#![doc = include_str!("readme.md")]
2use oak_core::{Language, LanguageCategory};
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6/// Handlebars language definition.
7#[derive(Debug, Clone, PartialEq, Eq, Hash)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9pub struct HandlebarsLanguage {
10    /// Variable tag start
11    pub variable_start: String,
12    /// Variable tag end
13    pub variable_end: String,
14    /// Unescaped variable tag start
15    pub unescaped_start: String,
16    /// Unescaped variable tag end
17    pub unescaped_end: String,
18}
19
20impl HandlebarsLanguage {
21    /// Creates a new `HandlebarsLanguage` instance.
22    pub fn new() -> Self {
23        Self::default()
24    }
25}
26
27impl Default for HandlebarsLanguage {
28    fn default() -> Self {
29        Self { variable_start: "{{".to_string(), variable_end: "}}".to_string(), unescaped_start: "{{{".to_string(), unescaped_end: "}}}".to_string() }
30    }
31}
32
33unsafe impl Send for HandlebarsLanguage {}
34unsafe impl Sync for HandlebarsLanguage {}
35
36impl Language for HandlebarsLanguage {
37    const NAME: &'static str = "handlebars";
38    const CATEGORY: LanguageCategory = LanguageCategory::Markup;
39
40    type TokenType = crate::lexer::token_type::HandlebarsTokenType;
41    type ElementType = crate::parser::element_type::HandlebarsElementType;
42    type TypedRoot = crate::ast::HandlebarsRoot;
43}