Files
Moonlight/Moonlight.Shared/Shared/FilterOptions.cs

62 lines
1.5 KiB
C#

using System.Diagnostics.CodeAnalysis;
namespace Moonlight.Shared.Shared;
public class FilterOptions : IParsable<FilterOptions>
{
public FilterOptions()
{
Filters = new Dictionary<string, string>();
}
public FilterOptions(Dictionary<string, string> filters)
{
Filters = filters;
}
public Dictionary<string, string> Filters { get; set; }
public static FilterOptions Parse(string s, IFormatProvider? provider)
{
if (!TryParse(s, provider, out var result))
throw new AggregateException("Unable to parse filter options");
return result;
}
public static bool TryParse(
[NotNullWhen(true)] string? input,
IFormatProvider? provider,
[MaybeNullWhen(false)] out FilterOptions result
)
{
result = new FilterOptions();
if (string.IsNullOrEmpty(input))
return true;
var filters = input.Split(';', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
foreach (var part in filters)
{
var filterParts = part.Split('$', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
if (filterParts.Length != 2)
continue;
result.Filters.Add(filterParts[0], filterParts[1]);
}
return true;
}
public override string ToString()
{
var result = "";
foreach (var filter in Filters)
result += $"{filter.Key}${filter.Value};";
return result;
}
}