pub fn parse_identifier(input: &str) -> IResult<&str, String> {
    let (input, (_, first_char, rest, _)) = tuple((
                                                character::complete::space0,
                                                complete::one_of("abcdefghijklmnopqrstuvwzxyABCDEFGHIJKLMNOPQRSTUVWZXY_"),
                                                take_while(name_char), 
                                                character::complete::space0
                                                ))(input)?;
    let mut s = first_char.to_string();
    s.push_str(rest);

    Ok((input, s))
}
// identifier = namespace or function name
identifier = namespace or function name
identifier = namespace or function name
pub fn parse_identifier(input: &str) -> IResult<&str, String> {
    let (input, (_, first_char, rest, _)) = tuple((
                                                character::complete::space0,
                                                complete::one_of("abcdefghijklmnopqrstuvwzxyABCDEFGHIJKLMNOPQRSTUVWZXY_"),
                                                take_while(name_char), 
                                                character::complete::space0
                                                ))(input)?;
    let mut s = first_char.to_string();
    s.push_str(rest);
    Ok((input, s))
}
pub fn parse_identifier ( input : & str ) -> IResult < & str , String > { let ( input , ( _ , first_char , rest , _ ) ) = tuple ( ( character :: complete :: space0 , complete :: one_of ( " " ) , take_while ( name_char ) , character :: complete :: space0 ) ) ( input ) ? ; let mut s = first_char . to_string ( ) ; s . push_str ( rest ) ; Ok ( ( input , s ) ) }
identifier = namespace or function name
identifier = namespace or function name
input
&str
input
&str