@@ -31,6 +31,9 @@ public struct HttpUrl {
3131 /// Fragment of the url, e.g. `#foo`
3232 public private( set) var fragment : String ?
3333
34+ /// Appends trailing slash at the end of the path, e.g. `localhost.com/any/path/`
35+ public private( set) var isTrailingSlashEnabled : Bool
36+
3437 ///
3538 /// Initialize a HttpUrl object
3639 ///
@@ -41,21 +44,24 @@ public struct HttpUrl {
4144 /// - Parameter resource: The resource, default: `nil`
4245 /// - Parameter query: The query, default: `[:]`
4346 /// - Parameter fragment: The fragment, default: `nil`
47+ /// - Parameter trailingSlashEnabled: Sets ``HttpUrl/isTrailingSlashEnabled``, default: `true`
4448 ///
4549 public init ( scheme: String = " https " ,
4650 host: String ,
4751 port: Int = 80 ,
4852 path: [ String ] = [ ] ,
4953 resource: String ? = nil ,
5054 query: [ String : String ] = [ : ] ,
51- fragment: String ? = nil ) {
55+ fragment: String ? = nil ,
56+ trailingSlashEnabled: Bool = true ) {
5257 self . scheme = scheme
5358 self . host = host
5459 self . port = port
5560 self . path = path
5661 self . resource = resource
5762 self . query = query
5863 self . fragment = fragment
64+ self . isTrailingSlashEnabled = trailingSlashEnabled
5965 }
6066}
6167
@@ -139,7 +145,9 @@ public extension HttpUrl {
139145 path += ( resource. hasPrefix ( " / " ) ? resource : " / " + resource)
140146 }
141147 else {
142- path += " / "
148+ if isTrailingSlashEnabled {
149+ path += " / "
150+ }
143151 }
144152 components. path = path
145153 components. fragment = fragment
0 commit comments