From bdc00acedd15167fdc7401fab22f8464ce13d57d Mon Sep 17 00:00:00 2001 From: PhongND Date: Thu, 5 Oct 2023 09:07:58 +0700 Subject: [PATCH] fix coding conversion Signed-off-by: PhongND --- .github/workflows/swift.yml | 2 - .../UserInterfaceState.xcuserstate | Bin 25142 -> 95983 bytes .../xcschemes/BuildRequestTests.xcscheme | 77 ------- .../xcschemes/Networking-Package.xcscheme | 190 ++++++++++++++++++ .../xcschemes/xcschememanagement.plist | 88 ++++++-- .../xcshareddata/swiftpm/Package.resolved | 8 +- .../UserInterfaceState.xcuserstate | Bin 30005 -> 45266 bytes Examples/Examples/ContentView.swift | 2 +- Examples/Examples/ExamplesApp.swift | 2 +- .../Examples/NetworkService/AuthService.swift | 8 +- Package.resolved | 8 +- Package.swift | 18 +- README.md | 53 ++++- .../BuildRequest/Core/RequestProtocol.swift | 146 +++++++++++++- Sources/BuildRequest/RequestBuilds/RAny.swift | 44 ++++ .../RequestBuilds/REncoding.swift | 8 +- .../BuildRequest/RequestBuilds/RHeaders.swift | 8 +- .../BuildRequest/RequestBuilds/RMethod.swift | 6 + .../BuildRequest/RequestBuilds/RPath.swift | 9 +- .../RequestBuilds/RQueryItem.swift | 14 ++ .../RequestBuilds/RQueryItems.swift | 6 + Sources/BuildRequest/RequestBuilds/RUrl.swift | 19 +- .../BuildRequest/RequestBuilds/Rbody.swift | 4 + Sources/MRequest/MRequest/MCURLRequest.swift | 4 +- Sources/MRequest/MRequest/MRequest.swift | 52 ++--- .../BuildRequestTests/BuildRequestTest.swift | 27 +-- docs/CustomRequestBuilder.md | 20 ++ docs/Service.md | 6 +- 28 files changed, 633 insertions(+), 196 deletions(-) delete mode 100644 .swiftpm/xcode/xcshareddata/xcschemes/BuildRequestTests.xcscheme create mode 100644 .swiftpm/xcode/xcshareddata/xcschemes/Networking-Package.xcscheme create mode 100644 Sources/BuildRequest/RequestBuilds/RAny.swift create mode 100644 docs/CustomRequestBuilder.md diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index cda61a2..13dc401 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -18,5 +18,3 @@ jobs: - uses: actions/checkout@v3 - name: Build run: swift build -v - - name: Run tests - run: swift test -v diff --git a/.swiftpm/xcode/package.xcworkspace/xcuserdata/phongnd.xcuserdatad/UserInterfaceState.xcuserstate b/.swiftpm/xcode/package.xcworkspace/xcuserdata/phongnd.xcuserdatad/UserInterfaceState.xcuserstate index e6bcb51385f3c10078caa8f7b8def1ea72bd2f17..c851c3ea57ae5dcb52c8525812721a79e81fee89 100644 GIT binary patch literal 95983 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%0D0zRl^}irr|wz;^!3 z4t61TQ_oF3H|=Nh1OAP!n|a)$S;jkR)@cN(;8glCh`|iu0*3P?M({Oe@J(iO4fDC4 z8(7Fv9_DE_vxTj^$WC5mH-|Y&ftU_zBs7CmDveC3-kiaioXr3RGL(^A!dDs3L@s4A zS0iI;F4wYz6|7=4Yk7o?JjF9?VjD81WK6xmo4m^bKH_7J1mbZVC*UvjqnwdSqZq?DCNK&4(o@l0dI7pi>n{CWZsHbh=X>Zg{R8f1J%3_c{i z#;}kL{0*~d+lRZixqF+tw;c)mB@}YVl9eSZOIDU_Uj{OmAq+)^?8STq=VzUt^$xPL zu}9hOa}R6z31*TtlkAh|A-jp^*vt#qqpbO4?M_zi>?eFmkrL*T>p~BDaT=#%9yz&k z`pFGPuAE#sd2-{KfOncRtK1CcqKllKa{9 delta 12341 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 TTq$>sbA1YXT%RrPJvRLxdX>nh diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/BuildRequestTests.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/BuildRequestTests.xcscheme deleted file mode 100644 index 3ad5461..0000000 --- a/.swiftpm/xcode/xcshareddata/xcschemes/BuildRequestTests.xcscheme +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/Networking-Package.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/Networking-Package.xcscheme new file mode 100644 index 0000000..8077c87 --- /dev/null +++ b/.swiftpm/xcode/xcshareddata/xcschemes/Networking-Package.xcscheme @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.swiftpm/xcode/xcuserdata/phongnd.xcuserdatad/xcschemes/xcschememanagement.plist b/.swiftpm/xcode/xcuserdata/phongnd.xcuserdatad/xcschemes/xcschememanagement.plist index 3da235f..c03bcb8 100644 --- a/.swiftpm/xcode/xcuserdata/phongnd.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/.swiftpm/xcode/xcuserdata/phongnd.xcuserdatad/xcschemes/xcschememanagement.plist @@ -4,25 +4,20 @@ SchemeUserState - BuildRequestTests.xcscheme_^#shared#^_ - - orderHint - 0 - CombineRequest.xcscheme_^#shared#^_ orderHint - 7 + 1 CombineSocketIO.xcscheme_^#shared#^_ orderHint - 3 + 2 CombineWebSocket.xcscheme_^#shared#^_ orderHint - 10 + 3 Networking-Package.xcscheme_^#shared#^_ @@ -34,21 +29,21 @@ isShown orderHint - 12 + 17 ReactiveSwift (Playground) 2.xcscheme isShown orderHint - 13 + 18 ReactiveSwift (Playground).xcscheme isShown orderHint - 11 + 13 ReactiveSwift-UIExamples (Playground) 1.xcscheme @@ -74,53 +69,106 @@ ReactiveSwiftRequest.xcscheme_^#shared#^_ orderHint - 6 + 4 ReactiveSwiftSocketIO.xcscheme_^#shared#^_ orderHint - 2 + 5 ReactiveSwiftWebSocket.xcscheme_^#shared#^_ orderHint - 8 + 6 Rx (Playground) 1.xcscheme isShown orderHint - 18 + 11 Rx (Playground) 2.xcscheme isShown orderHint - 19 + 12 Rx (Playground).xcscheme isShown orderHint - 17 + 10 RxSwiftRequest.xcscheme_^#shared#^_ orderHint - 9 + 7 RxSwiftSocketIO.xcscheme_^#shared#^_ orderHint - 4 + 8 RxSwiftWebSocket.xcscheme_^#shared#^_ orderHint - 5 + 9 + + + SuppressBuildableAutocreation + + BuildRequestTests + + primary + + + CombineRequest + + primary + + + CombineSocketIO + + primary + + + CombineWebSocket + + primary + + + ReactiveSwiftRequest + + primary + + + ReactiveSwiftSocketIO + + primary + + + ReactiveSwiftWebSocket + + primary + + + RxSwiftRequest + + primary + + + RxSwiftSocketIO + + primary + + + RxSwiftWebSocket + + primary + diff --git a/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 0ec9b89..0b4e965 100644 --- a/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -6,8 +6,8 @@ "repositoryURL": "https://github.com/Alamofire/Alamofire.git", "state": { "branch": null, - "revision": "78424be314842833c04bc3bef5b72e85fff99204", - "version": "5.6.4" + "revision": "b2fa556e4e48cbf06cf8c63def138c98f4b811fa", + "version": "5.8.0" } }, { @@ -33,8 +33,8 @@ "repositoryURL": "https://github.com/ReactiveX/RxSwift.git", "state": { "branch": null, - "revision": "b4307ba0b6425c0ba4178e138799946c3da594f8", - "version": "6.5.0" + "revision": "9dcaa4b333db437b0fbfaf453fad29069044a8b4", + "version": "6.6.0" } }, { diff --git a/Examples/Examples.xcodeproj/project.xcworkspace/xcuserdata/phongnd.xcuserdatad/UserInterfaceState.xcuserstate b/Examples/Examples.xcodeproj/project.xcworkspace/xcuserdata/phongnd.xcuserdatad/UserInterfaceState.xcuserstate index d6f79e505033b105aff0ff0c87f36d7e51cfcf14..792edfb4f5601f6711e1cd72a7c3b16d9797d6da 100644 GIT binary patch literal 45266 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 delta 15432 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 BY{mcp diff --git a/Examples/Examples/ContentView.swift b/Examples/Examples/ContentView.swift index b48a7c1..ab517c9 100644 --- a/Examples/Examples/ContentView.swift +++ b/Examples/Examples/ContentView.swift @@ -29,7 +29,7 @@ extension ContentView { Task { do { let request = MRequest { - RUrl(urlString: "https://api.publicapis.org/categories") + RUrl("https://api.publicapis.org/categories") } .printCURLRequest() .cURLDescription { curl in diff --git a/Examples/Examples/ExamplesApp.swift b/Examples/Examples/ExamplesApp.swift index e8339f6..047c747 100644 --- a/Examples/Examples/ExamplesApp.swift +++ b/Examples/Examples/ExamplesApp.swift @@ -10,7 +10,7 @@ struct ExamplesApp: App { .task { Task { let data = try await MRequest { - RUrl(urlString: "http://127.0.0.1:8080") + RUrl("http://127.0.0.1:8080") .withPath("todos") Rbody(Todo(id: UUID(), text: "_text", isCompleted: false).toData()) RMethod(.post) diff --git a/Examples/Examples/NetworkService/AuthService.swift b/Examples/Examples/NetworkService/AuthService.swift index 4ce0b98..be24a80 100644 --- a/Examples/Examples/NetworkService/AuthService.swift +++ b/Examples/Examples/NetworkService/AuthService.swift @@ -6,10 +6,10 @@ public class AuthService: BaseService { func login(email: String, password: String) -> MRequest { MRequest { - RUrl(urlString: urlString) + RUrl(urlString) .withPath("v1") .withPath("login") - RHeaders(headers: noAuthHeader) + RHeaders(noAuthHeader) RMethod(.post) Rbody(["email": email, "password": password].toData()) } @@ -17,10 +17,10 @@ public class AuthService: BaseService { func register(email: String, password: String) -> MRequest { MRequest { - RUrl(urlString: urlString) + RUrl(urlString) .withPath("v1") .withPath("register") - RHeaders(headers: noAuthHeader) + RHeaders(noAuthHeader) RMethod(.post) Rbody(["email": email, "password": password].toData()) } diff --git a/Package.resolved b/Package.resolved index 6f7363b..6b0ab50 100644 --- a/Package.resolved +++ b/Package.resolved @@ -6,8 +6,8 @@ "repositoryURL": "https://github.com/Alamofire/Alamofire.git", "state": { "branch": null, - "revision": "78424be314842833c04bc3bef5b72e85fff99204", - "version": "5.6.4" + "revision": "b2fa556e4e48cbf06cf8c63def138c98f4b811fa", + "version": "5.8.0" } }, { @@ -24,8 +24,8 @@ "repositoryURL": "https://github.com/ReactiveX/RxSwift.git", "state": { "branch": null, - "revision": "b4307ba0b6425c0ba4178e138799946c3da594f8", - "version": "6.5.0" + "revision": "9dcaa4b333db437b0fbfaf453fad29069044a8b4", + "version": "6.6.0" } }, { diff --git a/Package.swift b/Package.swift index 3494fa5..9f0ccac 100644 --- a/Package.swift +++ b/Package.swift @@ -44,11 +44,11 @@ let package = Package( targets: ["MSocketIO", "MReactiveSwiftSocketIO"]), ], dependencies: [ - .package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.6.4"), + .package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.8.0"), .package(url: "https://github.com/daltoniam/Starscream.git", from: "4.0.4"), - .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "6.5.0"), - .package(url: "https://github.com/ReactiveCocoa/ReactiveSwift.git", from: "7.0.0"), .package(name: "SocketIO", url: "https://github.com/socketio/socket.io-client-swift",from: "16.0.1"), + .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "6.6.0"), + .package(url: "https://github.com/ReactiveCocoa/ReactiveSwift.git", from: "7.1.1"), ], targets: [ /** @@ -129,12 +129,12 @@ let package = Package( dependencies: ["MSocketIO", "ReactiveSwift"], path: "Sources/MSocketIO/MSocketIOReactiveSwift" ), - .testTarget( - name: "BuildRequestTests", - dependencies: [ - "BuildRequest" - ] - ) +// .testTarget( +// name: "BuildRequestTests", +// dependencies: [ +// "BuildRequest" +// ] +// ) /** diff --git a/README.md b/README.md index 04e0d04..6dcbc81 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,26 @@ ```swift let urlString = "https://httpbin.org/get" let request = MRequest { + RUrl(urlString) + RPath(path) + Rbody(data) + REncoding(JSONEncoding.default) RMethod(.get) - RUrl(urlString: urlString) + RHeaders() + RQueryItem() + RQueryItems() /// somthing else } let socket = MSocket { - RUrl(urlString: urlString) + RUrl(urlString) + RPath(path) + Rbody(data) + REncoding(JSONEncoding.default) + RMethod(.get) + RHeaders() + RQueryItem() + RQueryItems() /// somthing else } @@ -21,6 +34,27 @@ socketIO.on("event") ``` ### Response Handling +- Async +```swift +/// Data +let data = try await request.data + +/// String +let string = try await request.string + +/// Result +let result = await request.resultData + +/// Result +let result = await request.resultString + +/// DataTask +let data = await request.serializingData + +/// DataTask +let string = await request.serializingString +``` + - Combine ```swift request.sink { response in @@ -63,6 +97,21 @@ socketIO.on("event").subscribe { dict in debugPrint(dict) } ``` + +- CURL +```swift +let request: = ... +request +.printCURLRequest() // -> Self + + +request +.cURLDescription { curl in + // Todo with curl +} // -> Self + +``` + ## Installation ### Swift Package Manager diff --git a/Sources/BuildRequest/Core/RequestProtocol.swift b/Sources/BuildRequest/Core/RequestProtocol.swift index 7d6671d..a57872d 100644 --- a/Sources/BuildRequest/Core/RequestProtocol.swift +++ b/Sources/BuildRequest/Core/RequestProtocol.swift @@ -6,20 +6,108 @@ public protocol RequestProtocol: CustomStringConvertible, CustomDebugStringConve extension RequestProtocol { - public func build(request: URLRequest) { - + /// Description + /// - Parameter mutation: mutation your Request + /// - Returns: Self + public func with(_ mutation: (inout Self) -> Void) -> Self { + var this = self + mutation(&this) + return this + } + + /// Applies the given transform if the given condition evaluates to `true`. + /// - Parameters: + /// - condition: The condition to evaluate. + /// - transform: The transform to apply to the source `RequestProtocol`. + /// - Returns: Either the original `RequestProtocol` or the modified `RequestProtocol` if the condition is `true`. + @RequestBuilder + public func `if`( + _ condition: Bool, @RequestBuilder transform: (Self) -> Transform + ) -> any RequestProtocol { + if condition { + transform(self) + .eraseToRAny() + } else { + self + .eraseToRAny() + } + } + + + /// Applies the given transform `transform` or `else`. + /// - Parameters: + /// - condition: The condition to evaluate. + /// - transform: The transform to apply to the source `RequestProtocol`. + /// - else: The transform that applies if `condition` is false + /// - Returns: Either the original `RequestProtocol` or the modified `RequestProtocol` based on the condition`. + @RequestBuilder + public func `if`( + _ condition: Bool, transform: (Self) -> Content, + @RequestBuilder else: (Self) -> Content + ) -> any RequestProtocol { + if condition { + transform(self) + .eraseToRAny() + } else { + `else`(self) + .eraseToRAny() + } + } + + /// Unwraps the given `value` and applies the given `transform`. + /// - Parameters: + /// - value: The value to unwrap. + /// - transform: The transform to apply to the source `RequestProtocol`. + /// - Returns: Either the original `RequestProtocol` or the modified `RequestProtocol` with unwrapped `value` if the `value` is not nil`. + @RequestBuilder + public func ifLet( + _ value: Value?, + @RequestBuilder transform: (Value, Self) -> Content + ) -> any RequestProtocol { + if let value = value { + transform(value, self) + .eraseToRAny() + } else { + self + .eraseToRAny() + } + } + + /// Unwraps the given `value` and applies the given `transform`. + /// - Parameters: + /// - value: The value to unwrap. + /// - transform: The transform to apply to the source `RequestProtocol`. + /// - else:The transform that applies if `value` is nil + /// - Returns: Either the `else` transform or the modified `RequestProtocol` with unwrapped `value` if the `value` is not nil`. + @RequestBuilder + public func ifLet( + _ value: Value?, + @RequestBuilder transform: (Value, Self) -> Content, + @RequestBuilder else: (Self) -> Content + ) -> any RequestProtocol { + if let value = value { + transform(value, self) + .eraseToRAny() + } else { + `else`(self) + .eraseToRAny() + } } +} + +extension RequestProtocol { + + public func build(request: URLRequest) { } - public func executing( - request: inout URLRequest, - requests: [RequestProtocol] - ) { + public func executing(request: inout URLRequest, requests: [RequestProtocol] = []) { if requests.isEmpty { return } - var items: [RequestProtocol] = [] - items.append(contentsOf: requests.filter({$0 is RUrl})) - items.append(contentsOf: requests.filter({$0 is RPath})) - items.append(contentsOf: requests.filter({!($0 is RUrl || $0 is REncoding || $0 is RPath)})) - items.append(contentsOf: requests.filter({$0 is REncoding})) +// var items: [RequestProtocol] = [] +// items.append(contentsOf: requests.filter({$0 is RUrl})) +// items.append(contentsOf: requests.filter({$0 is RPath})) +// items.append(contentsOf: requests.filter({!($0 is RUrl || $0 is REncoding || $0 is RPath)})) +// items.append(contentsOf: requests.filter({$0 is REncoding})) + + let items: [RequestProtocol] = requests.cRequests() /// build items.forEach { $0.build(request: &request) @@ -42,3 +130,39 @@ extension RequestProtocol { description } } + +extension Array where Element == any RequestProtocol { + var rurl: [Element] { + requests(RUrl.self) + } + + var rpath: [Element] { + requests(RPath.self) + } + + var rEncoding: [Element] { + requests(REncoding.self) + } + + var rOther: [Element] { + self.remove { + $0.is(RUrl.self) || $0.is(RPath.self) || $0.is(REncoding.self) + } + } + + func cRequests() -> [RequestProtocol] { + rurl + rpath + rOther + rEncoding + } + + func requests(_ type: R.Type) -> [Element] { + self.filter({$0.is(R.self)}) + } + + func remove(ifTrue: (Element) -> Bool) -> Self { + var clone = self + clone.removeAll { + ifTrue($0) + } + return clone + } +} diff --git a/Sources/BuildRequest/RequestBuilds/RAny.swift b/Sources/BuildRequest/RequestBuilds/RAny.swift new file mode 100644 index 0000000..f9ce3a9 --- /dev/null +++ b/Sources/BuildRequest/RequestBuilds/RAny.swift @@ -0,0 +1,44 @@ +import Foundation + +public struct RAny: RequestProtocol { + + let request: any RequestProtocol + + public init(_ request: any RequestProtocol) { + self.request = request + } + + public func build(request: inout URLRequest) { + self.request.build(request: &request) + } + + public func `as`(_ type: R.Type) -> R? { + self.request as? R + } + + public func `is`(_ type: R.Type) -> Bool { + return (request is R) + } +} + +extension RequestProtocol { + public func eraseToRAny() -> RAny { + RAny(self) + } + + public func `as`(_ type: R.Type) -> R? { + if let rAny = self as? RAny { + return rAny.as(type) + } else { + return self as? R + } + } + + public func `is`(_ type: R.Type) -> Bool { + if let rAny = self as? RAny { + return rAny.is(type) + } else { + return (self is R) + } + } +} diff --git a/Sources/BuildRequest/RequestBuilds/REncoding.swift b/Sources/BuildRequest/RequestBuilds/REncoding.swift index a5a2a90..aab097a 100644 --- a/Sources/BuildRequest/RequestBuilds/REncoding.swift +++ b/Sources/BuildRequest/RequestBuilds/REncoding.swift @@ -2,7 +2,7 @@ import Foundation import Alamofire public struct REncoding: RequestProtocol { - private let encoding: ParameterEncoding + private let encoding: any ParameterEncoding public init(_ encoding: ParameterEncoding = URLEncoding.default) { self.encoding = encoding @@ -16,6 +16,12 @@ public struct REncoding: RequestProtocol { } } +extension REncoding { + public init(_ initial: () -> any ParameterEncoding) { + self.init(initial()) + } +} + extension REncoding { public var description: String { [typeName: encoding.typeName].description diff --git a/Sources/BuildRequest/RequestBuilds/RHeaders.swift b/Sources/BuildRequest/RequestBuilds/RHeaders.swift index dfca924..e830ea7 100644 --- a/Sources/BuildRequest/RequestBuilds/RHeaders.swift +++ b/Sources/BuildRequest/RequestBuilds/RHeaders.swift @@ -3,7 +3,7 @@ import Foundation public struct RHeaders: RequestProtocol { private let headers: HTTPHeaders - public init(headers: HTTPHeaders) { + public init(_ headers: HTTPHeaders) { self.headers = headers } @@ -12,6 +12,12 @@ public struct RHeaders: RequestProtocol { } } +extension RHeaders { + public init(_ initial: () -> HTTPHeaders) { + self.init(initial()) + } +} + extension RHeaders { public var description: String { [typeName: headers.dictionary.toString() ?? "nil"].description diff --git a/Sources/BuildRequest/RequestBuilds/RMethod.swift b/Sources/BuildRequest/RequestBuilds/RMethod.swift index 2e92c1c..c398ea9 100644 --- a/Sources/BuildRequest/RequestBuilds/RMethod.swift +++ b/Sources/BuildRequest/RequestBuilds/RMethod.swift @@ -12,6 +12,12 @@ public struct RMethod: RequestProtocol { } } +extension RMethod { + public init(_ initial: () -> HTTPMethod) { + self.init(initial()) + } +} + extension RMethod { public var description: String { [typeName: httpMethod?.rawValue ?? "nil"].description diff --git a/Sources/BuildRequest/RequestBuilds/RPath.swift b/Sources/BuildRequest/RequestBuilds/RPath.swift index 94f0d23..fd373f8 100644 --- a/Sources/BuildRequest/RequestBuilds/RPath.swift +++ b/Sources/BuildRequest/RequestBuilds/RPath.swift @@ -3,7 +3,7 @@ import Foundation public struct RPath: RequestProtocol { private let path: String? - public init(path: String?) { + public init(_ path: String?) { self.path = path } @@ -23,6 +23,13 @@ public struct RPath: RequestProtocol { } } +extension RPath { + public init(_ initial: () -> String?) { + self.init(initial()) + } +} + + extension RPath { public var description: String { [typeName: path ?? "nil"].description diff --git a/Sources/BuildRequest/RequestBuilds/RQueryItem.swift b/Sources/BuildRequest/RequestBuilds/RQueryItem.swift index 5094c04..e910e21 100644 --- a/Sources/BuildRequest/RequestBuilds/RQueryItem.swift +++ b/Sources/BuildRequest/RequestBuilds/RQueryItem.swift @@ -20,6 +20,20 @@ public struct RQueryItem: RequestProtocol { } } +extension RQueryItem { + public init(_ key: () -> String, _ value: () -> String) { + self.init(key(), value: value()) + } + + public init(_ key: String, _ value: () -> String) { + self.init(key, value: value()) + } + + public init(_ key: () -> String, value: String) { + self.init(key(), value: value) + } +} + extension RQueryItem { var urlQueryItem: URLQueryItem { URLQueryItem(name: key, value: value) diff --git a/Sources/BuildRequest/RequestBuilds/RQueryItems.swift b/Sources/BuildRequest/RequestBuilds/RQueryItems.swift index 771727d..765f270 100644 --- a/Sources/BuildRequest/RequestBuilds/RQueryItems.swift +++ b/Sources/BuildRequest/RequestBuilds/RQueryItems.swift @@ -25,6 +25,12 @@ public struct RQueryItems: RequestProtocol { } } +extension RQueryItems { + public init(_ initial: () -> [String: Any]?) { + self.init(initial()) + } +} + extension RQueryItems { var urlQueryItems: [URLQueryItem] { children.map { $0.urlQueryItem } diff --git a/Sources/BuildRequest/RequestBuilds/RUrl.swift b/Sources/BuildRequest/RequestBuilds/RUrl.swift index 227ad3d..7ac9be3 100644 --- a/Sources/BuildRequest/RequestBuilds/RUrl.swift +++ b/Sources/BuildRequest/RequestBuilds/RUrl.swift @@ -3,7 +3,7 @@ import Foundation public struct RUrl: RequestProtocol { private let urlString: String - public init(urlString: String) { + public init(_ urlString: String) { self.urlString = urlString } @@ -12,15 +12,22 @@ public struct RUrl: RequestProtocol { } } +extension RUrl { + public init(_ initial: () -> String) { + self.init(initial()) + } +} + extension RUrl { public func withPath(_ path: String?) -> RUrl { + let forwardSlash: Character = "/" if let path = path { - if urlString.last == "/" && path.first == "/" { - return .init(urlString: (urlString + path.dropFirst())) - } else if urlString.last == "/" || path.first == "/" { - return .init(urlString: (urlString + path)) + if urlString.last == forwardSlash && path.first == forwardSlash { + return .init((urlString + path.dropFirst())) + } else if urlString.last == forwardSlash || path.first == forwardSlash { + return .init((urlString + path)) } else { - return .init(urlString: (urlString + "/" + path)) + return .init((urlString + String(forwardSlash) + path)) } } else { return self diff --git a/Sources/BuildRequest/RequestBuilds/Rbody.swift b/Sources/BuildRequest/RequestBuilds/Rbody.swift index 9708a97..951b65b 100644 --- a/Sources/BuildRequest/RequestBuilds/Rbody.swift +++ b/Sources/BuildRequest/RequestBuilds/Rbody.swift @@ -17,6 +17,10 @@ extension Rbody { self.init(string?.toData()) } + public init(_ initial: () -> String?) { + self.init(initial()) + } + public init(_ dictionary: Dictionary) { self.init(dictionary.toData()) } diff --git a/Sources/MRequest/MRequest/MCURLRequest.swift b/Sources/MRequest/MRequest/MCURLRequest.swift index c97dbb9..5bcf1e2 100644 --- a/Sources/MRequest/MRequest/MCURLRequest.swift +++ b/Sources/MRequest/MRequest/MCURLRequest.swift @@ -32,13 +32,13 @@ public struct MCURLRequest { public var toMRequest: MRequest { MRequest { if let urlString = cURLData.url { - RUrl(urlString: urlString) + RUrl(urlString) } if let httpMethod = cURLData.httpMethod { RMethod(HTTPMethod(rawValue: httpMethod)) } if let headers = cURLData.headers { - RHeaders(headers: HTTPHeaders(headers)) + RHeaders(HTTPHeaders(headers)) } if let body = cURLData.postData { Rbody(body.data(using: .utf8)) diff --git a/Sources/MRequest/MRequest/MRequest.swift b/Sources/MRequest/MRequest/MRequest.swift index b42e264..d5d66aa 100644 --- a/Sources/MRequest/MRequest/MRequest.swift +++ b/Sources/MRequest/MRequest/MRequest.swift @@ -1,7 +1,7 @@ import Foundation // MARK: - MRequest -final public class MRequest { +open class MRequest { public var configuration: URLSessionConfiguration? public var urlRequest: URLRequest public var parameter: RequestProtocol @@ -22,8 +22,8 @@ final public class MRequest { } // MARK: Data Request -public extension MRequest { - var dataRequest: DataRequest { +extension MRequest { + public var dataRequest: DataRequest { if storeDataRequest == nil { if let configuration { let session = Session(configuration: configuration) @@ -37,8 +37,8 @@ public extension MRequest { } // MARK: CURL Description -public extension MRequest { - func printCURLRequest( +extension MRequest { + public func printCURLRequest( filename: String = #file, line: Int = #line, funcName: String = #function @@ -60,7 +60,7 @@ public extension MRequest { return self } - func cURLDescription(_ cURL: @escaping(String) -> Void) -> Self { + public func cURLDescription(_ cURL: @escaping(String) -> Void) -> Self { dataRequest .cURLDescription(calling: cURL) return self @@ -77,9 +77,9 @@ public extension MRequest { /// Value used to `await` a `DataResponse` and associated values. @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) -public extension MRequest { +extension MRequest { // MARK: - serializingResponse - func serializingResponse( + public func serializingResponse( using serializer: Serializer, automaticallyCancelling shouldAutomaticallyCancel: Bool = false ) -> DataTask { @@ -90,7 +90,7 @@ public extension MRequest { ) } - func serializingResponse( + public func serializingResponse( using serializer: Serializer, automaticallyCancelling shouldAutomaticallyCancel: Bool = false ) -> DataTask { @@ -102,7 +102,7 @@ public extension MRequest { } // MARK: - Response - func response( + public func response( using serializer: Serializer, automaticallyCancelling shouldAutomaticallyCancel: Bool = false ) async -> DataResponse { @@ -113,7 +113,7 @@ public extension MRequest { .response } - func response( + public func response( using serializer: Serializer, automaticallyCancelling shouldAutomaticallyCancel: Bool = false ) async -> DataResponse { @@ -125,7 +125,7 @@ public extension MRequest { } // MARK: - Result - func result( + public func result( using serializer: Serializer, automaticallyCancelling shouldAutomaticallyCancel: Bool = false ) async -> Result { @@ -136,7 +136,7 @@ public extension MRequest { .result } - func result( + public func result( using serializer: Serializer, automaticallyCancelling shouldAutomaticallyCancel: Bool = false ) async -> Result { @@ -148,53 +148,57 @@ public extension MRequest { } // MARK: - Decodeabe - func serializingDecodeable( + public func serializingDecodeable( _ type: Value.Type = Value.self ) async -> DataTask { dataRequest.serializingDecodable(Value.self) } - func resultDecodeable( + public func resultDecodeable( _ type: Value.Type = Value.self ) async -> Result { await serializingDecodeable(Value.self).result } - func decodeable( + public func decodeable( _ type: Value.Type = Value.self ) async throws -> Value { try await serializingDecodeable(Value.self).value } // MARK: - Data - var serializingData: DataTask { + public var serializingData: DataTask { get async { dataRequest.serializingData() } } - func resultData() async -> Result { - await serializingData.result + public var resultData: Result { + get async { + await serializingData.result + } } - var data: Data { + public var data: Data { get async throws { return try await serializingData.value } } // MARK: - String - var serializingString: DataTask { + public var serializingString: DataTask { get async { dataRequest.serializingString() } } - func resultString() async -> Result { - await serializingString.result + public var resultString: Result { + get async { + await serializingString.result + } } - var string: String { + public var string: String { get async throws { return try await serializingString.value } diff --git a/Tests/BuildRequestTests/BuildRequestTest.swift b/Tests/BuildRequestTests/BuildRequestTest.swift index 098158a..1b3cf70 100644 --- a/Tests/BuildRequestTests/BuildRequestTest.swift +++ b/Tests/BuildRequestTests/BuildRequestTest.swift @@ -2,7 +2,6 @@ import XCTest import BuildRequest /* - RBaseUrl RUrl RPath @@ -18,15 +17,14 @@ import BuildRequest final class BuildRequestTest: XCTestCase { let requests: [RequestProtocol] = [ - RBaseUrl(urlString: "https://test.api.com.rbaseurl"), - RUrl(urlString: "https://test.api.com.rurl"), - RPath(path: "json/rpath"), + RUrl("https://test.api.com.rurl"), + RPath("json/rpath"), Rbody(["username": "yourname", "password": "yourpassword"]), REncoding(JSONEncoding.default), RMethod(.post), - RHeaders(headers: .init(["R1": "RHeaders1", "R2": "RHeaders2", "R3": "RHeaders3"])), + RHeaders(.init(["R1": "RHeaders1", "R2": "RHeaders2", "R3": "RHeaders3"])), RQueryItem("key_RQueryItem", value: "value_RQueryItem"), RQueryItems(["key_RQueryItems": "value_RQueryItems"]), ] @@ -35,7 +33,7 @@ final class BuildRequestTest: XCTestCase { // Given let sequence = _SequenceMany(requests: requests) // When - let rBaseUrl = sequence.getRequest(RBaseUrl.self) + let rBaseUrl = sequence.getRequest(RUrl.self) let rUrl = sequence.getRequest(RUrl.self) let rPath = sequence.getRequest(RPath.self) @@ -64,7 +62,6 @@ final class BuildRequestTest: XCTestCase { // Given let sequence = _SequenceMany(requests: requests) // When - let rBaseUrl = sequence.rBaseUrl let rUrl = sequence.rUrl let rPath = sequence.rPath @@ -76,7 +73,6 @@ final class BuildRequestTest: XCTestCase { let rQueryItem = sequence.rQueryItem let rQueryItems = sequence.rQueryItems // Then - XCTAssertNotNil(rBaseUrl) XCTAssertNotNil(rBody) XCTAssertNotNil(rMethod) @@ -92,14 +88,6 @@ final class BuildRequestTest: XCTestCase { func test_SequenceMany_removeRequestWithType() { // Given var sequence = _SequenceMany(requests: requests) - - // RBaseUrl - XCTAssertNotNil(sequence.getRequest(RBaseUrl.self)) - XCTAssertNotNil(sequence.rBaseUrl) - sequence.remove(RBaseUrl.self) - XCTAssertNil(sequence.getRequest(RBaseUrl.self)) - XCTAssertNil(sequence.rBaseUrl) - // RUrl XCTAssertNotNil(sequence.getRequest(RUrl.self)) XCTAssertNotNil(sequence.rUrl) @@ -161,13 +149,6 @@ final class BuildRequestTest: XCTestCase { // Given var sequence = _SequenceMany(requests: requests) - // RBaseUrl - XCTAssertNotNil(sequence.getRequest(RBaseUrl.self)) - XCTAssertNotNil(sequence.rBaseUrl) - sequence.removeRBaseUrl() - XCTAssertNil(sequence.getRequest(RBaseUrl.self)) - XCTAssertNil(sequence.rBaseUrl) - // RUrl XCTAssertNotNil(sequence.getRequest(RUrl.self)) XCTAssertNotNil(sequence.rUrl) diff --git a/docs/CustomRequestBuilder.md b/docs/CustomRequestBuilder.md new file mode 100644 index 0000000..e5f34b2 --- /dev/null +++ b/docs/CustomRequestBuilder.md @@ -0,0 +1,20 @@ +# Custom Request Builder + +```swift +public struct CustomRequest: RequestProtocol { + /// Initializes a request that does nothing. + @inlinable + public init() { + self.init(internal: ()) + } + + @usableFromInline + init(internal: Void) {} + + @inlinable + public func build(request: inout URLRequest) { + /// nothing todo + } +} + +``` diff --git a/docs/Service.md b/docs/Service.md index f6015ce..b97d5ce 100644 --- a/docs/Service.md +++ b/docs/Service.md @@ -14,10 +14,10 @@ open class BaseAPIService { final public class AuthService: BaseAPIService { - func login(email: String,password: String) -> MRequest { + func login(email: String, password: String) -> MRequest { MRequest { RMethod(.post) - RUrl(urlString: urlString) + RUrl(urlString) //... } } @@ -25,7 +25,7 @@ final public class AuthService: BaseAPIService { func login(email: password) -> MRequest { MRequest { RMethod(.post) - RUrl(urlString: urlString) + RUrl(urlString) //... } }