lib-ruby-parser 3.0.11

Ruby parser
Documentation
use lib_ruby_parser_nodes::template::*;

const TEMPLATE: &str = "// This file is auto-generated by {{ helper generated-by }}

crate::use_native_or_external!(StringPtr);

{{ each message }}<dnl>
{{ helper message-comment }}
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct {{ helper message-camelcase-name }} {
{{ each message-field }}<dnl>
    {{ helper mesage-field-comment }}
    pub {{ helper message-field-name }}: {{ helper message-field-rust-field-type }},
{{ end }}<dnl>
}

impl {{ helper message-camelcase-name }} {
{{ each message-field }}<dnl>
    /// Returns `{{ helper message-field-name }}` field
    pub fn get_{{ helper message-field-name }}(&self) -> &{{ helper message-field-rust-field-type }} {
        &self.{{ helper message-field-name }}
    }
{{ end }}<dnl>
}

{{ end }}<dnl>

impl crate::DiagnosticMessage {
{{ each message }}<dnl>
    /// Casts `self` to `Option<&{{ helper message-camelcase-name }}>`, return `None` if variant doesn't match
    pub fn as_{{ helper message-lower-name }}(&self) -> Option<&{{ helper message-camelcase-name }}> {
        match self {
            Self::{{ helper message-camelcase-name }}(variant) => Some(variant),
            _ => None
        }
    }
{{ end }}<dnl>
}
";

pub(crate) fn codegen() {
    let template = TemplateRoot::new(TEMPLATE).unwrap();
    let fns = crate::codegen::fns::default_fns!();

    let contents = template.render(ALL_DATA, &fns);
    std::fs::write("src/error/message/native/variants.rs", contents).unwrap();
}