diff --git a/src/Elastic.Documentation/Extensions/IFileInfoExtensions.cs b/src/Elastic.Documentation/Extensions/IFileInfoExtensions.cs index 2a80ef6cf..6f61670a5 100644 --- a/src/Elastic.Documentation/Extensions/IFileInfoExtensions.cs +++ b/src/Elastic.Documentation/Extensions/IFileInfoExtensions.cs @@ -18,4 +18,28 @@ public static string ReadToEnd(this IFileInfo fileInfo) using var reader = new StreamReader(stream); return reader.ReadToEnd(); } + + /// Validates is in a subdirectory of + public static bool IsSubPathOf(this IFileInfo file, IDirectoryInfo parentDirectory) + { + var parent = file.Directory; + return parent is not null && parent.IsSubPathOf(parentDirectory); + } +} + +public static class IDirectoryInfoExtensions +{ + /// Validates is subdirectory of + public static bool IsSubPathOf(this IDirectoryInfo directory, IDirectoryInfo parentDirectory) + { + var parent = directory; + do + { + if (parent.FullName == parentDirectory.FullName) + return true; + parent = parent.Parent; + } while (parent != null); + + return false; + } }