Files
discogs-service/Sources/DiscogsService/Internal/Extensions/String+Functions.swift
T
javier 791ebf4f78 Implemented the User Agent middleware (#6)
This PR contains the work done to implement the `UserAgentMiddleware` middleware that includes user agent information into a header of the requests sent by the `Client` type, as defined in the [Discogs documentation](https://www.discogs.com/developers/#page:home,header:home-general-information). For this purpose, the `CamelCaseValidationRule`, `SemanticVersionValidationRule` and `URLValidationRule` types were implemented and integrated into the existing `ValidateInputUseCase` type.

Reviewed-on: #6
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2025-10-13 00:54:17 +00:00

46 lines
1.5 KiB
Swift

// ===----------------------------------------------------------------------===
//
// This source file is part of the DiscogsService open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the DiscogsService project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
// See CONTRIBUTORS for the list of DiscogsService project authors
//
// SPDX-License-Identifier: Apache-2.0
//
// ===----------------------------------------------------------------------===
import Foundation
extension String {
// MARK: Functions
/// Checks whether a regular expression pattern fully matches a string or not.
/// - Parameter pattern: A regular expression pattern to match a string against.
/// - Returns: A flag that indicates whether a given pattern fully matches a string or not.
func fullyMatch(pattern: String) -> Bool {
do {
if #available(macOS 13.0, iOS 16.0, tvOS 16.0, watchOS 6.0, *) {
let securityInput = try Regex(pattern)
let matches = self.wholeMatch(of: securityInput)
return matches != nil
} else {
let securityInput = try NSRegularExpression(pattern: pattern)
let matches = securityInput.matches(
in: self,
range: .init(location: 0, length: count)
)
return !matches.isEmpty
}
} catch {
return false
}
}
}