/// <summary> /// Gets the setting parser either registered for the type or in the type. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="registry"></param> /// <param name="source"></param> /// <param name="parsableFirst"></param> /// <returns></returns> public static ISettingParser GetSettingParser <T>(this StaticSettingParserRegistry registry, T source, bool parsableFirst = true) where T : class { if (parsableFirst) { if (source is IParsable parsable) { return(parsable.SettingParser); } if (registry.TryRetrieve <T>(out var value)) { return(value); } } else { if (registry.TryRetrieve <T>(out var value)) { return(value); } if (source is IParsable parsable) { return(parsable.SettingParser); } } throw new KeyNotFoundException($"There is no setting parser registered for {typeof(T).Name}."); }
/// <summary> /// If <paramref name="source"/> is <see cref="IParsable"/> will use that parser, otherwise searches for a registered parser. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="registry"></param> /// <param name="source"></param> /// <param name="args"></param> /// <param name="parsableFirst">Whether to check for the object being parsable first before trying to get the registered setting parser.</param> /// <returns></returns> public static ISettingParserResult Parse <T>(this StaticSettingParserRegistry registry, T source, ParseArgs args, bool parsableFirst = true) where T : class => registry.GetSettingParser(source, parsableFirst).Parse(source, args);