/// <summary>
    /// Registers an HTTP request interception, replacing any existing registration.
    /// </summary>
    /// <param name="builder">The <see cref="HttpRequestInterceptionBuilder"/> to use to create the registration.</param>
    /// <returns>
    /// The current <see cref="HttpClientInterceptorOptions"/>.
    /// </returns>
    /// <exception cref="ArgumentNullException">
    /// <paramref name="builder"/> is <see langword="null"/>.
    /// </exception>
    public HttpClientInterceptorOptions Register(HttpRequestInterceptionBuilder builder)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }

        HttpInterceptionResponse interceptor = builder.Build();

        ConfigureMatcherAndRegister(interceptor);

        return(this);
    }
    /// <summary>
    /// Deregisters an existing HTTP request interception, if it exists.
    /// </summary>
    /// <param name="builder">The HTTP interception to deregister.</param>
    /// <returns>
    /// The current <see cref="HttpClientInterceptorOptions"/>.
    /// </returns>
    /// <exception cref="ArgumentNullException">
    /// <paramref name="builder"/> is <see langword="null"/>.
    /// </exception>
    /// <remarks>
    /// If <paramref name="builder"/> has been reconfigured since it was used
    /// to register a previous HTTP request interception it will not remove that
    /// registration. In such cases, use <see cref="Clear"/>.
    /// </remarks>
    public HttpClientInterceptorOptions Deregister(HttpRequestInterceptionBuilder builder)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }

        HttpInterceptionResponse interceptor = builder.Build();

        string key = BuildKey(interceptor);

        _mappings.Remove(key);

        return(this);
    }