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>
This commit was merged in pull request #6.
This commit is contained in:
2025-10-13 00:54:17 +00:00
committed by Javier Cicchelli
parent 24d703b967
commit 791ebf4f78
1988 changed files with 2882 additions and 2010 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
{"kind":"article","identifier":{"url":"doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel\/Input\/Headers-swift.struct\/Equatable-Implementations","interfaceLanguage":"swift"},"variants":[{"paths":["\/documentation\/discogsservice\/operations\/getlabel\/input\/headers-swift.struct\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"topicSections":[{"generated":true,"title":"Operators","identifiers":["doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel\/Input\/Headers-swift.struct\/!=(_:_:)"],"anchor":"Operators"}],"sections":[],"metadata":{"title":"Equatable Implementations","role":"collectionGroup","roleHeading":"API Collection","modules":[{"name":"DiscogsService"}]},"hierarchy":{"paths":[["doc:\/\/DiscogsService\/documentation\/DiscogsService","doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations","doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel","doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel\/Input","doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel\/Input\/Headers-swift.struct"]]},"schemaVersion":{"minor":3,"patch":0,"major":0},"references":{"doc://DiscogsService/documentation/DiscogsService/Operations/getLabel":{"fragments":[{"text":"enum","kind":"keyword"},{"text":" ","kind":"text"},{"text":"getLabel","kind":"identifier"}],"role":"symbol","navigatorTitle":[{"text":"getLabel","kind":"identifier"}],"title":"Operations.getLabel","abstract":[{"type":"text","text":"Get information about a label"}],"identifier":"doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel","kind":"symbol","type":"topic","url":"\/documentation\/discogsservice\/operations\/getlabel"},"doc://DiscogsService/documentation/DiscogsService":{"role":"collection","title":"DiscogsService","kind":"symbol","identifier":"doc:\/\/DiscogsService\/documentation\/DiscogsService","abstract":[],"type":"topic","url":"\/documentation\/discogsservice"},"doc://DiscogsService/documentation/DiscogsService/Operations/getLabel/Input":{"title":"Operations.getLabel.Input","identifier":"doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel\/Input","navigatorTitle":[{"text":"Input","kind":"identifier"}],"abstract":[],"type":"topic","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Input","kind":"identifier"}],"role":"symbol","url":"\/documentation\/discogsservice\/operations\/getlabel\/input","kind":"symbol"},"doc://DiscogsService/documentation/DiscogsService/Operations":{"fragments":[{"text":"enum","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Operations","kind":"identifier"}],"role":"symbol","navigatorTitle":[{"text":"Operations","kind":"identifier"}],"title":"Operations","abstract":[{"text":"API operations, with input and output types, generated from ","type":"text"},{"type":"codeVoice","code":"#\/paths"},{"type":"text","text":" in the OpenAPI document."}],"identifier":"doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations","kind":"symbol","type":"topic","url":"\/documentation\/discogsservice\/operations"},"doc://DiscogsService/documentation/DiscogsService/Operations/getLabel/Input/Headers-swift.struct/!=(_:_:)":{"fragments":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!=","kind":"identifier"},{"text":" ","kind":"text"},{"text":"(","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":") -> ","kind":"text"},{"preciseIdentifier":"s:Sb","text":"Bool","kind":"typeIdentifier"}],"role":"symbol","title":"!=(_:_:)","abstract":[{"type":"text","text":"Returns a Boolean value indicating whether two values are not equal."}],"identifier":"doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel\/Input\/Headers-swift.struct\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/discogsservice\/operations\/getlabel\/input\/headers-swift.struct\/!=(_:_:)"},"doc://DiscogsService/documentation/DiscogsService/Operations/getLabel/Input/Headers-swift.struct":{"kind":"symbol","role":"symbol","url":"\/documentation\/discogsservice\/operations\/getlabel\/input\/headers-swift.struct","navigatorTitle":[{"text":"Headers","kind":"identifier"}],"title":"Operations.getLabel.Input.Headers","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Headers"}],"abstract":[],"identifier":"doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel\/Input\/Headers-swift.struct","type":"topic"}}}
{"topicSections":[{"title":"Operators","identifiers":["doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel\/Input\/Headers-swift.struct\/!=(_:_:)"],"generated":true,"anchor":"Operators"}],"schemaVersion":{"patch":0,"minor":3,"major":0},"sections":[],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel\/Input\/Headers-swift.struct\/Equatable-Implementations"},"kind":"article","metadata":{"role":"collectionGroup","title":"Equatable Implementations","modules":[{"name":"DiscogsService"}],"roleHeading":"API Collection"},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/discogsservice\/operations\/getlabel\/input\/headers-swift.struct\/equatable-implementations"]}],"hierarchy":{"paths":[["doc:\/\/DiscogsService\/documentation\/DiscogsService","doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations","doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel","doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel\/Input","doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel\/Input\/Headers-swift.struct"]]},"references":{"doc://DiscogsService/documentation/DiscogsService/Operations/getLabel/Input/Headers-swift.struct":{"url":"\/documentation\/discogsservice\/operations\/getlabel\/input\/headers-swift.struct","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Headers"}],"navigatorTitle":[{"kind":"identifier","text":"Headers"}],"abstract":[],"title":"Operations.getLabel.Input.Headers","identifier":"doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel\/Input\/Headers-swift.struct","type":"topic","kind":"symbol","role":"symbol"},"doc://DiscogsService/documentation/DiscogsService/Operations/getLabel/Input/Headers-swift.struct/!=(_:_:)":{"title":"!=(_:_:)","identifier":"doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel\/Input\/Headers-swift.struct\/!=(_:_:)","kind":"symbol","abstract":[{"text":"Returns a Boolean value indicating whether two values are not equal.","type":"text"}],"role":"symbol","type":"topic","fragments":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!=","kind":"identifier"},{"text":" ","kind":"text"},{"text":"(","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":") -> ","kind":"text"},{"text":"Bool","kind":"typeIdentifier","preciseIdentifier":"s:Sb"}],"url":"\/documentation\/discogsservice\/operations\/getlabel\/input\/headers-swift.struct\/!=(_:_:)"},"doc://DiscogsService/documentation/DiscogsService/Operations/getLabel":{"title":"Operations.getLabel","navigatorTitle":[{"text":"getLabel","kind":"identifier"}],"identifier":"doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel","kind":"symbol","abstract":[{"type":"text","text":"Get information about a label"}],"role":"symbol","type":"topic","fragments":[{"text":"enum","kind":"keyword"},{"text":" ","kind":"text"},{"text":"getLabel","kind":"identifier"}],"url":"\/documentation\/discogsservice\/operations\/getlabel"},"doc://DiscogsService/documentation/DiscogsService":{"title":"DiscogsService","role":"collection","abstract":[],"kind":"symbol","type":"topic","identifier":"doc:\/\/DiscogsService\/documentation\/DiscogsService","url":"\/documentation\/discogsservice"},"doc://DiscogsService/documentation/DiscogsService/Operations":{"type":"topic","title":"Operations","navigatorTitle":[{"text":"Operations","kind":"identifier"}],"abstract":[{"type":"text","text":"API operations, with input and output types, generated from "},{"type":"codeVoice","code":"#\/paths"},{"type":"text","text":" in the OpenAPI document."}],"identifier":"doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations","role":"symbol","url":"\/documentation\/discogsservice\/operations","fragments":[{"text":"enum","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Operations","kind":"identifier"}],"kind":"symbol"},"doc://DiscogsService/documentation/DiscogsService/Operations/getLabel/Input":{"identifier":"doc:\/\/DiscogsService\/documentation\/DiscogsService\/Operations\/getLabel\/Input","kind":"symbol","type":"topic","role":"symbol","abstract":[],"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Input","kind":"identifier"}],"title":"Operations.getLabel.Input","navigatorTitle":[{"text":"Input","kind":"identifier"}],"url":"\/documentation\/discogsservice\/operations\/getlabel\/input"}}}
File diff suppressed because one or more lines are too long