Also might be good for readability to define StringMatchParts before MatchParts in the struct, since MatchParts makes a bit more sense once you've oriented to where the matches are coming from.