srtemplate 0.3.3

Template String blazing fast with dependencyless
Documentation
use crate::Error;

use super::literals::{number_literal, string_literal};
use super::{advance_delimiter, is_eof, parse_template_expression, skip_whitespace, TemplateNode};

pub fn parse_function_arguments<'a>(
    input: &'a str,
    chars: &[u8],
    position: &mut usize,
) -> Result<Vec<TemplateNode<'a>>, Error> {
    let mut args = Vec::new();

    while !is_eof(chars, *position) && chars[*position] != b')' {
        skip_whitespace(chars, position);

        if is_eof(chars, *position) || chars[*position] == b')' {
            break;
        }

        match chars[*position] {
            b'"' => {
                args.push(string_literal(input, chars, position)?);
            }
            n if n.is_ascii_digit() => args.push(number_literal(input, chars, position)?),
            _ => {
                args.push(parse_template_expression(input, chars, position)?);
            }
        }

        skip_whitespace(chars, position);
        if !advance_delimiter(chars, ",", position) {
            break;
        }
    }
    Ok(args)
}