lib-ruby-parser-bindings 0.13.0

Tools to generate bindings for lib-ruby-parser
use super::{fields, ns};
use crate::options;
use lib_ruby_parser_nodes::Message;

/// Returns name of the message constructor for the given `message`
pub fn name(message: &Message) -> String {
    format!(
        "{ns}__new_{variant}",
        ns = ns(),
        variant = message.lower_name()
    )
}

fn arglist(message: &Message) -> String {
    message
        .fields
        .iter()
        .map(|field| {
            format!(
                "{field_type} {field_name}_blob",
                field_type = fields::field_type(field),
                field_name = fields::field_name(field)
            )
        })
        .collect::<Vec<_>>()
        .join(", ")
}

/// Returns C signature of the message constructor for the given `message`
pub fn sig(message: &Message) -> String {
    format!(
        "{diagnostic_message_blob} {fn_attributes} {constructor_name}({arglist})",
        diagnostic_message_blob = options().diagnostic_message_blob_name,
        fn_attributes = options().fn_attributes,
        constructor_name = name(message),
        arglist = arglist(message)
    )
}