public SegmentNode(ISegmentVariant matcher)
 {
     Matcher = matcher;
 }
 private static SegmentNode <TRequest, TResponse>?FindSegmentInNode(SegmentNode <TRequest, TResponse>?node, ISegmentVariant segment)
 {
     return(segment switch
     {
         Root _ => node,
         Literal literal => FindSegmentInNodeList(node?.LiteralChildren, literal),
         Parameter parameter => FindSegmentInNodeList(node?.ParameterChildren, parameter),
         _ => throw new InvalidOperationException()
     });