using System;
using System.Collections.Generic;
namespace StellaOps.Signals.Parsing;
///
/// Resolves callgraph parsers for specific languages.
///
public interface ICallgraphParserResolver
{
///
/// Resolves a parser for the supplied language.
///
ICallgraphParser Resolve(string language);
}
internal sealed class CallgraphParserResolver : ICallgraphParserResolver
{
private readonly IReadOnlyDictionary parsersByLanguage;
public CallgraphParserResolver(IEnumerable parsers)
{
ArgumentNullException.ThrowIfNull(parsers);
var map = new Dictionary(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);
}
}