private static bool RecursiveGet(
                EntryList list, ResourceUri uri, int segmentIndex, [MaybeNullWhen(false)] out Entry entry)
            {
                string segment = uri.Segments[segmentIndex];

                // Only try to get values when we're at the last segment.
                if (segmentIndex == uri.Segments.Length - 1)
                {
                    if (list.Names.TryGetValue(segment, out var nameEntry))
                    {
                        entry = nameEntry;
                        return(true);
                    }
                    if (list.Values.TryGetValue(segment, out var valueEntry))
                    {
                        entry = valueEntry;
                        return(true);
                    }
                }

                // If getting a value fails, we fallback and try to return a list.
                if (list.SubLists.TryGetValue(segment, out var listEntry))
                {
                    if (segmentIndex + 1 >= uri.Segments.Length)
                    {
                        entry = null;
                        return(false);
                    }
                    return(RecursiveGet(listEntry, uri, segmentIndex + 1, out entry));
                }

                entry = default;
                return(false);
            }
 public bool TryGet(ResourceUri uri, [MaybeNullWhen(false)] out Entry entry)
 {
     return(RecursiveGet(this, uri, segmentIndex: 0, out entry));
 }