Refactored project to module structure
This commit is contained in:
62
Moonlight.Shared/Shared/FilterOptions.cs
Normal file
62
Moonlight.Shared/Shared/FilterOptions.cs
Normal file
@@ -0,0 +1,62 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user