Skip to content

Commit

Permalink
Add Remove and Replace parameter functions to DefaultParameters (#2047)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexeyzimarev committed Apr 4, 2023
1 parent d8e1e9a commit 62ff3aa
Showing 1 changed file with 38 additions and 2 deletions.
40 changes: 38 additions & 2 deletions src/RestSharp/Parameters/DefaultParameters.cs
Expand Up @@ -22,22 +22,58 @@ public sealed class DefaultParameters : ParametersCollection {

public DefaultParameters(ReadOnlyRestClientOptions options) => _options = options;

public void AddParameter(Parameter parameter) {
/// <summary>
/// Safely add a default parameter to the collection.
/// </summary>
/// <param name="parameter">Parameter to add</param>
/// <returns></returns>
/// <exception cref="NotSupportedException"></exception>
/// <exception cref="ArgumentException"></exception>
public DefaultParameters AddParameter(Parameter parameter) {
lock (_lock) {
if (parameter.Type == ParameterType.RequestBody)
throw new NotSupportedException(
"Cannot set request body using default parameters. Use Request.AddBody() instead."
);

if (!_options.AllowMultipleDefaultParametersWithSameName &&
!MultiParameterTypes.Contains(parameter.Type) &&
!MultiParameterTypes.Contains(parameter.Type) &&
this.Any(x => x.Name == parameter.Name)) {
throw new ArgumentException("A default parameters with the same name has already been added", nameof(parameter));
}

Parameters.Add(parameter);
}

return this;
}

/// <summary>
/// Safely removes all the default parameters with the given name and type.
/// </summary>
/// <param name="name">Parameter name</param>
/// <param name="type">Parameter type</param>
/// <returns></returns>
[PublicAPI]
public DefaultParameters RemoveParameter(string name, ParameterType type) {
lock (_lock) {
Parameters.RemoveAll(x => x.Name == name && x.Type == type);
}

return this;
}

/// <summary>
/// Replace a default parameter with the same name and type.
/// </summary>
/// <param name="parameter">Parameter instance</param>
/// <returns></returns>
[PublicAPI]
public DefaultParameters ReplaceParameter(Parameter parameter)
=>
// ReSharper disable once NotResolvedInText
RemoveParameter(Ensure.NotEmptyString(parameter.Name, "Parameter name"), parameter.Type)
.AddParameter(parameter);

static readonly ParameterType[] MultiParameterTypes = { ParameterType.QueryString, ParameterType.GetOrPost };
}

0 comments on commit 62ff3aa

Please sign in to comment.