fn parse_all_tags_until_end(input: &str) -> IResult<&str, Vec<GoodToolsToken>>
    {
        let (input, tokens) = many1(
            preceded(opt(tag(" ")),
                     alt((
                         parse_known_tag,
                         parse_additional_parens_tag,
                         parse_additional_brackets_tag)))
        )(input)?;
        let (input, _) = eof(input)?;
        Ok((input, tokens))
    }
// two paths
// 1. title is up to the first parens or brackets tag where
// everything else forward is a tag
// 2. no tags, so entire string is a title.
two paths
1. title is up to the first parens or brackets tag where
everything else forward is a tag
2. no tags, so entire string is a title.
two paths 1 . title is up to the first parens or brackets tag where everything else forward is a tag 2 . no tags so entire string is a title .
fn parse_all_tags_until_end(input: &str) -> IResult<&str, Vec<GoodToolsToken>>
    {
        let (input, tokens) = many1(
            preceded(opt(tag(" ")),
                     alt((
                         parse_known_tag,
                         parse_additional_parens_tag,
                         parse_additional_brackets_tag)))
        )(input)?;
        let (input, _) = eof(input)?;
        Ok((input, tokens))
    }
fn parse_all_tags_until_end ( input : & str ) -> IResult < & str , Vec < GoodToolsToken > > { let ( input , tokens ) = many1 ( preceded ( opt ( tag ( " " ) ) , alt ( ( parse_known_tag , parse_additional_parens_tag , parse_additional_brackets_tag ) ) ) ) ( input ) ? ; let ( input , _ ) = eof ( input ) ? ; Ok ( ( input , tokens ) ) }
two paths
1. title is up to the first parens or brackets tag where
everything else forward is a tag
2. no tags, so entire string is a title.
two paths 1 . title is up to the first parens or brackets tag where everything else forward is a tag 2 . no tags so entire string is a title .
input
&str