mirror of
https://github.com/lantean-code/qbtmud.git
synced 2025-10-22 20:42:24 +00:00
77 lines
2.0 KiB
C#
77 lines
2.0 KiB
C#
using System.Text;
|
|
|
|
namespace Lantean.QBitTorrentClient
|
|
{
|
|
public class QueryBuilder
|
|
{
|
|
private readonly IList<KeyValuePair<string, string>> _parameters;
|
|
|
|
public QueryBuilder()
|
|
{
|
|
_parameters = [];
|
|
}
|
|
|
|
public QueryBuilder(IList<KeyValuePair<string, string>> parameters)
|
|
{
|
|
_parameters = parameters;
|
|
}
|
|
|
|
public QueryBuilder Add(string key, string value)
|
|
{
|
|
_parameters.Add(new KeyValuePair<string, string>(key, value));
|
|
return this;
|
|
}
|
|
|
|
public QueryBuilder AddIfNotNullOrEmpty(string key, string? value)
|
|
{
|
|
if (!string.IsNullOrEmpty(value))
|
|
{
|
|
_parameters.Add(new KeyValuePair<string, string>(key, value));
|
|
}
|
|
|
|
return this;
|
|
}
|
|
|
|
public QueryBuilder AddIfNotNullOrEmpty<T>(string key, T? value) where T : struct
|
|
{
|
|
if (value.HasValue)
|
|
{
|
|
_parameters.Add(new KeyValuePair<string, string>(key, value.ToString()!));
|
|
}
|
|
|
|
return this;
|
|
}
|
|
|
|
public string ToQueryString()
|
|
{
|
|
if (_parameters.Count == 0)
|
|
{
|
|
return string.Empty;
|
|
}
|
|
|
|
var queryString = new StringBuilder();
|
|
for (int i = 0; i < _parameters.Count; i++)
|
|
{
|
|
var kvp = _parameters[i];
|
|
if (i == 0)
|
|
{
|
|
queryString.Append('?');
|
|
}
|
|
else
|
|
{
|
|
queryString.Append('&');
|
|
}
|
|
queryString.Append(Uri.EscapeDataString(kvp.Key));
|
|
queryString.Append('=');
|
|
queryString.Append(Uri.EscapeDataString(kvp.Value));
|
|
}
|
|
|
|
return queryString.ToString();
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return ToQueryString();
|
|
}
|
|
}
|
|
} |