Restructure solution layout by module
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace StellaOps.Signals.Parsing;
|
||||
|
||||
/// <summary>
|
||||
/// Resolves callgraph parsers for specific languages.
|
||||
/// </summary>
|
||||
public interface ICallgraphParserResolver
|
||||
{
|
||||
/// <summary>
|
||||
/// Resolves a parser for the supplied language.
|
||||
/// </summary>
|
||||
ICallgraphParser Resolve(string language);
|
||||
}
|
||||
|
||||
internal sealed class CallgraphParserResolver : ICallgraphParserResolver
|
||||
{
|
||||
private readonly IReadOnlyDictionary<string, ICallgraphParser> parsersByLanguage;
|
||||
|
||||
public CallgraphParserResolver(IEnumerable<ICallgraphParser> parsers)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(parsers);
|
||||
|
||||
var map = new Dictionary<string, ICallgraphParser>(StringComparer.OrdinalIgnoreCase);
|
||||
foreach (var parser in parsers)
|
||||
{
|
||||
map[parser.Language] = parser;
|
||||
}
|
||||
|
||||
parsersByLanguage = map;
|
||||
}
|
||||
|
||||
public ICallgraphParser Resolve(string language)
|
||||
{
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(language);
|
||||
|
||||
if (parsersByLanguage.TryGetValue(language, out var parser))
|
||||
{
|
||||
return parser;
|
||||
}
|
||||
|
||||
throw new CallgraphParserNotFoundException(language);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user