pub async fn sigv4_validate_request<B, S, F>(
    request: Request<B>,
    region: &str,
    service: &str,
    get_signing_key: &mut S,
    server_timestamp: DateTime<Utc>,
    required_headers: &SignedHeaderRequirements,
    options: SignatureOptions
) -> Result<(Parts, Bytes, Principal), BoxError>where
    B: IntoRequestBytes,
    S: Service<GetSigningKeyRequest, Response = GetSigningKeyResponse, Error = BoxError, Future = F> + Send,
    F: Future<Output = Result<GetSigningKeyResponse, BoxError>> + Send,