public SigningStringCompositionRequest CreateForSigning(
            HttpRequestForSigning request,
            SigningSettings signingSettings,
            DateTimeOffset?timeOfComposing,
            TimeSpan?expires)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            if (signingSettings == null)
            {
                throw new ArgumentNullException(nameof(signingSettings));
            }

            return(new SigningStringCompositionRequest {
                Request = request.ToHttpRequestForSignatureString(),
                RequestTargetEscaping = signingSettings.RequestTargetEscaping,
                HeadersToInclude = signingSettings.Headers,
                TimeOfComposing = timeOfComposing,
                Expires = expires,
                Nonce = signingSettings.EnableNonce
                    ? _nonceGenerator.GenerateNonce()
                    : null
            });
        }
            public void CreatesRequestWithExpectedPropertyValues()
            {
                var actual = _sut.CreateForSigning(_request, _settings, _timeOfComposingUtc, _expires);

                actual.Request.Should().BeEquivalentTo(_request.ToHttpRequestForSignatureString());
                actual.RequestTargetEscaping.Should().Be(_settings.RequestTargetEscaping);
                actual.HeadersToInclude.Should().BeEquivalentTo(_settings.Headers, opts => opts.WithStrictOrdering());
                actual.TimeOfComposing.Should().Be(_timeOfComposingUtc);
                actual.Expires.Should().Be(_expires);
            }