< Summary

Information
Class: Nabs.Resources.EmbeddedResourceLoader
Assembly: Nabs.Resources
File(s): /home/runner/work/Nabs/Nabs/src/Nabs.Resources/EmbeddedResourceLoader.cs
Tag: 90_14636759620
Line coverage
100%
Covered lines: 49
Uncovered lines: 0
Coverable lines: 49
Total lines: 103
Line coverage: 100%
Branch coverage
100%
Covered branches: 10
Total branches: 10
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%44100%
GetResourceInfoItems(...)100%11100%
GetResourceStreamContent(...)100%44100%
GetResourceBytesContent(...)100%11100%
GetResourceTextContent(...)100%11100%
GetAssemblies(...)100%22100%

File(s)

/home/runner/work/Nabs/Nabs/src/Nabs.Resources/EmbeddedResourceLoader.cs

#LineLine coverage
 1using System.Text;
 2
 3namespace Nabs.Resources;
 4
 5public class EmbeddedResourceLoader
 6{
 37    private readonly System.Collections.Generic.HashSet<ResourceInfo> _resourceInfos = [];
 8
 9    public EmbeddedResourceLoader(params Type[] relativeAssemblyTypes)
 10    {
 311        var assemblies = GetAssemblies(relativeAssemblyTypes);
 12
 913        foreach (var assembly in assemblies)
 14        {
 315            var manifestResourceNames = assembly.GetManifestResourceNames();
 916            foreach (var manifestResourceName in manifestResourceNames)
 17            {
 318                _ = _resourceInfos.Add(new(manifestResourceName, assembly));
 19            }
 20        }
 321    }
 22
 23    public List<string> Warnings { get; } = [];
 24
 25    public IEnumerable<ResourceInfo> GetResourceInfoItems(Func<ResourceInfo, bool> predicate)
 26    {
 327        var items = _resourceInfos
 328            .Where(predicate);
 29
 330        return items;
 31    }
 32
 33    public Result<Stream> GetResourceStreamContent(Func<ResourceInfo, bool> predicate)
 34    {
 335        var resourceInfoItems = GetResourceInfoItems(predicate);
 336        var itemCount = resourceInfoItems.Count();
 337        if (itemCount == 0)
 38        {
 239            return new Result<Stream>(new Exception("No resource info items found."));
 40        }
 341        else if (itemCount > 1)
 42        {
 143            return new Result<Stream>(new Exception("More than one resource info item found."));
 44        }
 45
 346        var resourceInfoItem = resourceInfoItems.First();
 347        var resourceStream = resourceInfoItem.Assembly
 348            .GetManifestResourceStream(resourceInfoItem.Path)!;
 49
 350        return resourceStream;
 51    }
 52
 53    public Result<byte[]> GetResourceBytesContent(Func<ResourceInfo, bool> predicate)
 54    {
 155        var resourceStreamResult = GetResourceStreamContent(predicate);
 56
 157        var result = resourceStreamResult.Match(resourceStream =>
 158        {
 159            var resourceBytes = new byte[resourceStream.Length];
 160            resourceStream.ReadExactly(resourceBytes);
 161            return resourceBytes;
 162
 163        }, exception =>
 164        {
 165            return new Result<byte[]>(new Exception(""));
 166        });
 67
 168        return result;
 69    }
 70
 71    public Result<string> GetResourceTextContent(Func<ResourceInfo, bool> predicate)
 72    {
 173        var resourceStreamResult = GetResourceStreamContent(predicate);
 74
 175        var result = resourceStreamResult.Match(resourceStream =>
 176        {
 177            using var reader = new StreamReader(resourceStream, Encoding.UTF8);
 178            var text = reader.ReadToEnd();
 179            return text;
 180
 181        }, exception =>
 182        {
 183            return new Result<string>(new Exception(""));
 184        });
 85
 186        return result;
 87    }
 88
 89    private static System.Collections.Generic.HashSet<Assembly> GetAssemblies(params Type[] relativeAssemblyTypes)
 90    {
 391        var assemblies = new System.Collections.Generic.HashSet<Assembly>();
 92
 993        foreach (var relativeAssemblyType in relativeAssemblyTypes)
 94        {
 395            var assembly = Assembly.GetAssembly(relativeAssemblyType)!;
 396            _ = assemblies.Add(assembly);
 97        }
 98
 399        return assemblies;
 100    }
 101}
 102
 103public record struct ResourceInfo(string Path, Assembly Assembly);