diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000000..d86995350b
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,52 @@
+name: CI
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ branches:
+ - '*'
+ workflow_dispatch:
+
+jobs:
+ macos_tests:
+ runs-on: macos-11
+ strategy:
+ matrix:
+ xcode:
+ - "13.2.1" # Swift 5.5
+ command:
+ - test
+ - benchmarks
+ steps:
+ - uses: actions/checkout@v2
+ - name: Select Xcode ${{ matrix.xcode }}
+ run: sudo xcode-select -s /Applications/Xcode_${{ matrix.xcode }}.app
+ - name: System
+ run: system_profiler SPHardwareDataType
+ - name: Run ${{ matrix.command }}
+ run: make ${{ matrix.command }}
+
+ ubuntu_tests:
+ strategy:
+ matrix:
+ os: [ubuntu-18.04, ubuntu-20.04]
+
+ runs-on: ${{ matrix.os }}
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: Build
+ run: swift build
+ - name: Run tests
+ run: swift test
+
+ windows_tests:
+ runs-on: windows-2019
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: MaxDesiatov/swift-windows-action@v1
+ with:
+ swift-version: "5.5.1"
diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml
new file mode 100644
index 0000000000..24a5fda45b
--- /dev/null
+++ b/.github/workflows/documentation.yml
@@ -0,0 +1,112 @@
+# Build and deploy DocC to GitHub pages. Based off of @karwa's work here:
+# https://github.com/karwa/swift-url/blob/main/.github/workflows/docs.yml
+name: Documentation
+
+on:
+ release:
+ types:
+ - published
+ push:
+ branches:
+ - main
+ workflow_dispatch:
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Package
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+
+ - name: Download Swift 5.5.1
+ run: wget -q https://download.swift.org/swift-5.5.1-release/ubuntu2004/swift-5.5.1-RELEASE/swift-5.5.1-RELEASE-ubuntu20.04.tar.gz
+ - name: Extract Swift 5.5.1
+ run: tar xzf swift-5.5.1-RELEASE-ubuntu20.04.tar.gz
+ - name: Add Swift toolchain to PATH
+ run: |
+ echo "$GITHUB_WORKSPACE/swift-5.5.1-RELEASE-ubuntu20.04/usr/bin" >> $GITHUB_PATH
+
+ - name: Checkout swift-docc
+ uses: actions/checkout@v2
+ with:
+ repository: apple/swift-docc
+ ref: main
+ path: swift-docc
+ - name: Cache DocC
+ id: cache-docc
+ uses: actions/cache@v2
+ with:
+ key: swift-url-docc-build
+ path: swift-docc/.build
+ - name: Build swift-docc
+ if: ${{ !steps.cache-docc.outputs.cache-hit }}
+ run: |
+ cd swift-docc; swift build --product docc -c release; cd ..
+
+ - name: Checkout swift-docc-render
+ uses: actions/checkout@v2
+ with:
+ repository: apple/swift-docc-render
+ ref: main
+ path: swift-docc-render
+ - name: Build swift-docc-render
+ run: |
+ cd swift-docc-render; npm install && npm run build; cd ..
+
+ - name: Checkout gh-pages Branch
+ uses: actions/checkout@v2
+ with:
+ ref: gh-pages
+ path: docs-out
+
+ - name: Build documentation
+ run: >
+ rm -rf docs-out/.git;
+ rm -rf docs-out/main;
+
+ for tag in $(echo "main"; git tag);
+ do
+ echo "⏳ Generating documentation for "$tag" release.";
+
+ if [ -d "docs-out/$tag" ]
+ then
+ echo "✅ Documentation for "$tag" already exists.";
+ else
+ git checkout "$tag";
+ mkdir -p Sources/URLRouting/Documentation.docc;
+ export DOCC_HTML_DIR="$(pwd)/swift-docc-render/dist";
+
+ rm -rf .build/symbol-graphs;
+ mkdir -p .build/symbol-graphs;
+ swift build \
+ --target URLRouting \
+ -Xswiftc \
+ -emit-symbol-graph \
+ -Xswiftc \
+ -emit-symbol-graph-dir \
+ -Xswiftc \
+ .build/symbol-graphs \
+ && swift-docc/.build/release/docc convert Sources/URLRouting/Documentation.docc \
+ --fallback-display-name URLRouting \
+ --fallback-bundle-identifier co.pointfree.URLRouting \
+ --fallback-bundle-version 0.0.0 \
+ --additional-symbol-graph-dir \
+ .build/symbol-graphs \
+ --transform-for-static-hosting \
+ --hosting-base-path /swift-url-routing/"$tag" \
+ --output-path docs-out/"$tag" \
+ && echo "✅ Documentation generated for "$tag" release." \
+ || echo "⚠️ Documentation skipped for "$tag".";
+ fi;
+ done
+
+ - name: Fix permissions
+ run: 'sudo chown --recursive $USER docs-out'
+ - name: Publish documentation to GitHub Pages
+ uses: JamesIves/github-pages-deploy-action@4.1.7
+ with:
+ branch: gh-pages
+ folder: docs-out
+ single-commit: true
diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml
new file mode 100644
index 0000000000..dc82144b9d
--- /dev/null
+++ b/.github/workflows/format.yml
@@ -0,0 +1,27 @@
+name: Format
+
+on:
+ push:
+ branches:
+ - main
+
+jobs:
+ swift_format:
+ name: swift-format
+ runs-on: macOS-11
+ steps:
+ - uses: actions/checkout@v2
+ - name: Xcode Select
+ run: sudo xcode-select -s /Applications/Xcode_13.0.app
+ - name: Tap
+ run: brew tap pointfreeco/formulae
+ - name: Install
+ run: brew install Formulae/swift-format@5.5
+ - name: Format
+ run: make format
+ - uses: stefanzweifel/git-auto-commit-action@v4
+ with:
+ commit_message: Run swift-format
+ branch: 'main'
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000..95c4320919
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+.DS_Store
+/.build
+/Packages
+/*.xcodeproj
+xcuserdata/
diff --git a/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000000..919434a625
--- /dev/null
+++ b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/URLRouting-Package.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/URLRouting-Package.xcscheme
new file mode 100644
index 0000000000..32df3f1329
--- /dev/null
+++ b/.swiftpm/xcode/xcshareddata/xcschemes/URLRouting-Package.xcscheme
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/URLRouting.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/URLRouting.xcscheme
new file mode 100644
index 0000000000..5842664bb7
--- /dev/null
+++ b/.swiftpm/xcode/xcshareddata/xcschemes/URLRouting.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/swift-url-routing-benchmark.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/swift-url-routing-benchmark.xcscheme
new file mode 100644
index 0000000000..9d5a155280
--- /dev/null
+++ b/.swiftpm/xcode/xcshareddata/xcschemes/swift-url-routing-benchmark.xcscheme
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/variadics-generator.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/variadics-generator.xcscheme
new file mode 100644
index 0000000000..cf615c488d
--- /dev/null
+++ b/.swiftpm/xcode/xcshareddata/xcschemes/variadics-generator.xcscheme
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000000..3baf9dae9f
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 Point-Free
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000..0d82322ba9
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,44 @@
+PLATFORM_IOS = iOS Simulator,name=iPhone 11 Pro
+PLATFORM_MACOS = macOS
+PLATFORM_TVOS = tvOS Simulator,name=Apple TV 4K (at 1080p)
+
+default: test
+
+benchmarks:
+ swift run -c release swift-url-routing-benchmark
+
+test:
+ xcodebuild test \
+ -scheme URLRouting \
+ -destination platform="$(PLATFORM_IOS)"
+ xcodebuild test \
+ -scheme URLRouting \
+ -destination platform="$(PLATFORM_MACOS)"
+ xcodebuild test \
+ -scheme URLRouting \
+ -destination platform="$(PLATFORM_TVOS)"
+
+test-linux:
+ docker run \
+ --rm \
+ -v "$(PWD):$(PWD)" \
+ -w "$(PWD)" \
+ swift:5.3 \
+ bash -c 'make test-swift'
+
+test-swift:
+ swift test \
+ --enable-test-discovery \
+ --parallel
+
+format:
+ swift format --in-place --recursive \
+ ./Package.swift ./Sources ./Tests
+ find . -type f -name '*.md' -print0 | xargs -0 perl -pi -e 's/ +$$//'
+
+generate-variadics:
+ swift run variadics-generator \
+ --generate-path-zips \
+ > Sources/URLRouting/Builders/Variadics.swift
+
+.PHONY: benchmarks format generate-variadics test
diff --git a/Package.resolved b/Package.resolved
new file mode 100644
index 0000000000..e33450ab6f
--- /dev/null
+++ b/Package.resolved
@@ -0,0 +1,52 @@
+{
+ "object": {
+ "pins": [
+ {
+ "package": "swift-argument-parser",
+ "repositoryURL": "https://github.com/apple/swift-argument-parser",
+ "state": {
+ "branch": null,
+ "revision": "6b2aa2748a7881eebb9f84fb10c01293e15b52ca",
+ "version": "0.5.0"
+ }
+ },
+ {
+ "package": "Benchmark",
+ "repositoryURL": "https://github.com/google/swift-benchmark",
+ "state": {
+ "branch": null,
+ "revision": "a0564bf88df5f94eec81348a2f089494c6b28d80",
+ "version": "0.1.1"
+ }
+ },
+ {
+ "package": "swift-case-paths",
+ "repositoryURL": "https://github.com/pointfreeco/swift-case-paths",
+ "state": {
+ "branch": null,
+ "revision": "ce9c0d897db8a840c39de64caaa9b60119cf4be8",
+ "version": "0.8.1"
+ }
+ },
+ {
+ "package": "swift-parsing",
+ "repositoryURL": "https://github.com/pointfreeco/swift-parsing",
+ "state": {
+ "branch": null,
+ "revision": "28d32e9ace1c4c43f5e5a177be837a202494c2d5",
+ "version": "0.9.2"
+ }
+ },
+ {
+ "package": "xctest-dynamic-overlay",
+ "repositoryURL": "https://github.com/pointfreeco/xctest-dynamic-overlay",
+ "state": {
+ "branch": null,
+ "revision": "50a70a9d3583fe228ce672e8923010c8df2deddd",
+ "version": "0.2.1"
+ }
+ }
+ ]
+ },
+ "version": 1
+}
diff --git a/Package.swift b/Package.swift
new file mode 100644
index 0000000000..4164f3cab0
--- /dev/null
+++ b/Package.swift
@@ -0,0 +1,42 @@
+// swift-tools-version: 5.5
+
+import PackageDescription
+
+let package = Package(
+ name: "URLRouting",
+ products: [
+ .library(name: "URLRouting", targets: ["URLRouting"])
+ ],
+ dependencies: [
+ .package(url: "https://github.com/apple/swift-argument-parser", from: "0.5.0"),
+ .package(url: "https://github.com/pointfreeco/swift-parsing", from: "0.9.2"),
+ .package(url: "https://github.com/pointfreeco/xctest-dynamic-overlay", from: "0.2.1"),
+ .package(name: "Benchmark", url: "https://github.com/google/swift-benchmark", from: "0.1.1"),
+ ],
+ targets: [
+ .target(
+ name: "URLRouting",
+ dependencies: [
+ .product(name: "Parsing", package: "swift-parsing"),
+ .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"),
+ ]
+ ),
+ .testTarget(
+ name: "URLRoutingTests",
+ dependencies: [
+ "URLRouting"
+ ]
+ ),
+ .executableTarget(
+ name: "swift-url-routing-benchmark",
+ dependencies: [
+ "URLRouting",
+ .product(name: "Benchmark", package: "Benchmark"),
+ ]
+ ),
+ .executableTarget(
+ name: "variadics-generator",
+ dependencies: [.product(name: "ArgumentParser", package: "swift-argument-parser")]
+ ),
+ ]
+)
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000..c1802cf275
--- /dev/null
+++ b/README.md
@@ -0,0 +1,131 @@
+# swift-url-routing
+
+A bidirectional router with more type safety and less fuss. This library is built with [Parsing][swift-parsing].
+
+---
+
+* [Motivation](#Motivation)
+* [Getting started](#Getting-started)
+* [Documentation](#Documentation)
+* [License](#License)
+
+## Learn More
+
+This library was discussed in an [episode](http://pointfree.co/episodes/ep187-tour-of-parser-printers-url-routing) of [Point-Free](http://pointfree.co), a video series exploring functional programming and the Swift programming and the Swift language, hosted by [Brandon Williams](https://twitter.com/mbrandonw) and [Stephen Celis](https://twitter.com/stephencelis).
+
+
+
+
+
+## Motivation
+
+URL routing is a ubiquitous problem in both client-side and server-side applications:
+
+* Clients, such as iOS applications, need to route URLs for deep-linking, which amounts to picking apart a URL in order to figure out where to navigate the user in the app.
+* Servers, such as [Vapor][vapor] applications, also need to pick apart URL requests to figure out what page to serve, but also need to _generate_ valid URLs for linking within the website.
+
+This library provides URL routing function for both client and server applications, and does so in a composable, type-safe manner.
+
+## Getting Started
+
+To use the library you first begin with a domain modeling exercise. You model a route enum that represents each URL you want to recognize in your application, and each case of the enum holds the data you want to extract from the URL.
+
+For example, if we had screens in our application that represent showing all books, showing a particular book, and searching books, we can model this as an enum:
+
+```swift
+enum AppRoute {
+ case books
+ case book(id: Int)
+ case searchBooks(query: String, count: Int = 10)
+}
+```
+
+Notice that we only encode the data we want to extract from the URL in these cases. There are no details of where this data lives in the URL, such as whether it comes from path parameters, query parameters or POST body data.
+
+Those details are determined by the router, which can be constructed with the tools shipped in this library. Its purpose is to transform an incoming URL into the `AppRoute` type. For example:
+
+```swift
+import URLRouting
+
+let appRouter = OneOf {
+ // GET /books
+ Route(.case(AppRoute.books))) {
+ Path { "books" }
+ }
+
+ // GET /books/:id
+ Route(.case(AppRoute.books(id:))) {
+ Path { "books"; Digits() }
+ }
+
+ // GET /books/search?query=:query&count=:count
+ Route(.case(AppRoute.searchBooks(query:count:))) {
+ Path { "books"; "search" }
+ Query {
+ Field("query")
+ Field("count", default: 10) { Digits() }
+ }
+ }
+}
+```
+
+This router describes at a high-level how to pick apart the path components, query parameters, and more from a URL in order to transform it into a `AppRoute`.
+
+Once this router is defined you can use it to implement deep-linking logic in your application. You can implement a single function that accepts a `URL`, use the router's `match` method to transform it into an `AppRoute`, and then switch on the route to handle each deep link destination:
+
+```swift
+func handleDeepLink(url: URL) throws {
+ switch try appRouter.match(url: url) {
+ case .books:
+ // navigate to books screen
+
+ case let .book(id: id):
+ // navigate to book with id
+
+ case let .searchBooks(query: query, count: count):
+ // navigate to search screen with query and count
+ }
+}
+```
+
+This kind of routing is incredibly useful in client side iOS applications, but it can also be used in server-side applications. Even better, it can automatically transform `AppRoute` values back into URL's which is handy for linking to various parts of your website:
+
+```swift
+appRoute.path(for: .searchBooks(query: "Blob Bio"))
+// /books/search?query=Blob%20Bio
+```
+
+```swift
+Node.ul(
+ books.map { book in
+ .li(
+ .a(
+ .href(appRoute.path(for: .book(id: book.id))),
+ book.title
+ )
+ )
+ }
+)
+```
+```html
+
+```
+
+## Documentation
+
+The documentation for releases and main are available here:
+
+* [main][swift-url-routing-docs]
+* [0.1.0](https://pointfreeco.github.io/swift-url-routing/0.1.0/documentation/urlrouting)
+
+## License
+
+This library is released under the MIT license. See [LICENSE](LICENSE) for details.
+
+[swift-url-routing-docs]: https://pointfreeco.github.io/swift-url-routing
+[swift-parsing]: http://github.com/pointfreeco/swift-parsing
+[vapor]: http://vapor.codes
diff --git a/Sources/URLRouting/Body.swift b/Sources/URLRouting/Body.swift
new file mode 100644
index 0000000000..7c4afacfac
--- /dev/null
+++ b/Sources/URLRouting/Body.swift
@@ -0,0 +1,56 @@
+import Foundation
+
+/// Parses a request's body using a byte parser.
+public struct Body: Parser where Bytes.Input == Data {
+ @usableFromInline
+ let bytesParser: Bytes
+
+ @inlinable
+ public init(@ParserBuilder _ bytesParser: () -> Bytes) {
+ self.bytesParser = bytesParser()
+ }
+
+ /// Initializes a body parser from a byte conversion.
+ ///
+ /// Useful for parsing a request body in its entirety, for example as a JSON payload.
+ ///
+ /// ```swift
+ /// struct Comment: Codable {
+ /// var author: String
+ /// var message: String
+ /// }
+ ///
+ /// Body(.json(Comment.self))
+ /// ```
+ ///
+ /// - Parameter bytesConversion: A conversion that transforms bytes into some other type.
+ @inlinable
+ public init(_ bytesConversion: C)
+ where Bytes == Parsers.MapConversion>, C> {
+ self.bytesParser = Rest().replaceError(with: .init()).map(bytesConversion)
+ }
+
+ /// Initializes a body parser that parses the body as data in its entirety.
+ @inlinable
+ public init() where Bytes == Parsers.ReplaceError> {
+ self.bytesParser = Rest().replaceError(with: .init())
+ }
+
+ @inlinable
+ public func parse(_ input: inout URLRequestData) throws -> Bytes.Output {
+ guard var body = input.body
+ else { throw RoutingError() }
+
+ let output = try self.bytesParser.parse(&body)
+ input.body = body
+
+ return output
+ }
+}
+
+extension Body: ParserPrinter where Bytes: ParserPrinter {
+ @inlinable
+ public func print(_ output: Bytes.Output, into input: inout URLRequestData) rethrows {
+ input.body = try self.bytesParser.print(output)
+ }
+}
diff --git a/Sources/URLRouting/Builders/Variadics.swift b/Sources/URLRouting/Builders/Variadics.swift
new file mode 100644
index 0000000000..9c3875f50c
--- /dev/null
+++ b/Sources/URLRouting/Builders/Variadics.swift
@@ -0,0 +1,10683 @@
+// BEGIN AUTO-GENERATED CONTENT
+
+public struct PathZipOO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring
+{
+ public let p0: P0, p1: P1
+
+ @inlinable public init(_ p0: P0, _ p1: P1) {
+ self.p0 = p0
+ self.p1 = p1
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output
+ ) {
+ guard input.path.count >= 2 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1)
+ }
+}
+
+extension PathZipOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1
+ ) -> PathZipOO {
+ PathZipOO(p0, p1)
+ }
+}
+
+public struct PathZipOV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P1.Output == Void
+{
+ public let p0: P0, p1: P1
+
+ @inlinable public init(_ p0: P0, _ p1: P1) {
+ self.p0 = p0
+ self.p1 = p1
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output
+ ) {
+ guard input.path.count >= 2 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0)
+ }
+}
+
+extension PathZipOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P1.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1
+ ) -> PathZipOV {
+ PathZipOV(p0, p1)
+ }
+}
+
+public struct PathZipVO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P0.Output == Void
+{
+ public let p0: P0, p1: P1
+
+ @inlinable public init(_ p0: P0, _ p1: P1) {
+ self.p0 = p0
+ self.p1 = p1
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P1.Output
+ ) {
+ guard input.path.count >= 2 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ return (o1)
+ }
+}
+
+extension PathZipVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P0.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P1.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p1.print(output))
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1
+ ) -> PathZipVO {
+ PathZipVO(p0, p1)
+ }
+}
+
+public struct PathZipVV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P0.Output == Void,
+ P1.Output == Void
+{
+ public let p0: P0, p1: P1
+
+ @inlinable public init(_ p0: P0, _ p1: P1) {
+ self.p0 = p0
+ self.p1 = p1
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws {
+ guard input.path.count >= 2 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ return ()
+ }
+}
+
+extension PathZipVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P0.Output == Void,
+ P1.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1
+ ) -> PathZipVV {
+ PathZipVV(p0, p1)
+ }
+}
+
+public struct PathZipOOO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring
+{
+ public let p0: P0, p1: P1, p2: P2
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P2.Output
+ ) {
+ guard input.path.count >= 3 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o2)
+ }
+}
+
+extension PathZipOOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P2.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p2.print(output.2))
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2
+ ) -> PathZipOOO {
+ PathZipOOO(p0, p1, p2)
+ }
+}
+
+public struct PathZipOOV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P2.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output
+ ) {
+ guard input.path.count >= 3 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1)
+ }
+}
+
+extension PathZipOOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P2.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2
+ ) -> PathZipOOV {
+ PathZipOOV(p0, p1, p2)
+ }
+}
+
+public struct PathZipOVO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P1.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P2.Output
+ ) {
+ guard input.path.count >= 3 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o2)
+ }
+}
+
+extension PathZipOVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P1.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P2.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2
+ ) -> PathZipOVO {
+ PathZipOVO(p0, p1, p2)
+ }
+}
+
+public struct PathZipOVV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P1.Output == Void,
+ P2.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output
+ ) {
+ guard input.path.count >= 3 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0)
+ }
+}
+
+extension PathZipOVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P1.Output == Void,
+ P2.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2
+ ) -> PathZipOVV {
+ PathZipOVV(p0, p1, p2)
+ }
+}
+
+public struct PathZipVOO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P0.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P1.Output,
+ P2.Output
+ ) {
+ guard input.path.count >= 3 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ return (o1, o2)
+ }
+}
+
+extension PathZipVOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P0.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P1.Output,
+ P2.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print(output.0))
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2
+ ) -> PathZipVOO {
+ PathZipVOO(p0, p1, p2)
+ }
+}
+
+public struct PathZipVOV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P0.Output == Void,
+ P2.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P1.Output
+ ) {
+ guard input.path.count >= 3 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ return (o1)
+ }
+}
+
+extension PathZipVOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P0.Output == Void,
+ P2.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P1.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output))
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2
+ ) -> PathZipVOV {
+ PathZipVOV(p0, p1, p2)
+ }
+}
+
+public struct PathZipVVO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P0.Output == Void,
+ P1.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P2.Output
+ ) {
+ guard input.path.count >= 3 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ return (o2)
+ }
+}
+
+extension PathZipVVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P0.Output == Void,
+ P1.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P2.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p2.print(output))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2
+ ) -> PathZipVVO {
+ PathZipVVO(p0, p1, p2)
+ }
+}
+
+public struct PathZipVVV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P0.Output == Void,
+ P1.Output == Void,
+ P2.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws {
+ guard input.path.count >= 3 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ return ()
+ }
+}
+
+extension PathZipVVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P0.Output == Void,
+ P1.Output == Void,
+ P2.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2
+ ) -> PathZipVVV {
+ PathZipVVV(p0, p1, p2)
+ }
+}
+
+public struct PathZipOOOO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 4 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o2, o3)
+ }
+}
+
+extension PathZipOOOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p3.print(output.3))
+ input.path.prepend(try p2.print(output.2))
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3
+ ) -> PathZipOOOO {
+ PathZipOOOO(p0, p1, p2, p3)
+ }
+}
+
+public struct PathZipOOOV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P2.Output
+ ) {
+ guard input.path.count >= 4 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o2)
+ }
+}
+
+extension PathZipOOOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P2.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.2))
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3
+ ) -> PathZipOOOV {
+ PathZipOOOV(p0, p1, p2, p3)
+ }
+}
+
+public struct PathZipOOVO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P2.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 4 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o3)
+ }
+}
+
+extension PathZipOOVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P2.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3
+ ) -> PathZipOOVO {
+ PathZipOOVO(p0, p1, p2, p3)
+ }
+}
+
+public struct PathZipOOVV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output
+ ) {
+ guard input.path.count >= 4 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1)
+ }
+}
+
+extension PathZipOOVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3
+ ) -> PathZipOOVV {
+ PathZipOOVV(p0, p1, p2, p3)
+ }
+}
+
+public struct PathZipOVOO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P1.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P2.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 4 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o2, o3)
+ }
+}
+
+extension PathZipOVOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P1.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P2.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3
+ ) -> PathZipOVOO {
+ PathZipOVOO(p0, p1, p2, p3)
+ }
+}
+
+public struct PathZipOVOV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P1.Output == Void,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P2.Output
+ ) {
+ guard input.path.count >= 4 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o2)
+ }
+}
+
+extension PathZipOVOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P1.Output == Void,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P2.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3
+ ) -> PathZipOVOV {
+ PathZipOVOV(p0, p1, p2, p3)
+ }
+}
+
+public struct PathZipOVVO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P1.Output == Void,
+ P2.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 4 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o3)
+ }
+}
+
+extension PathZipOVVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P1.Output == Void,
+ P2.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p3.print(output.1))
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3
+ ) -> PathZipOVVO {
+ PathZipOVVO(p0, p1, p2, p3)
+ }
+}
+
+public struct PathZipOVVV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P1.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output
+ ) {
+ guard input.path.count >= 4 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0)
+ }
+}
+
+extension PathZipOVVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P1.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3
+ ) -> PathZipOVVV {
+ PathZipOVVV(p0, p1, p2, p3)
+ }
+}
+
+public struct PathZipVOOO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P0.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P1.Output,
+ P2.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 4 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ return (o1, o2, o3)
+ }
+}
+
+extension PathZipVOOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P0.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P1.Output,
+ P2.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print(output.0))
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3
+ ) -> PathZipVOOO {
+ PathZipVOOO(p0, p1, p2, p3)
+ }
+}
+
+public struct PathZipVOOV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P0.Output == Void,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P1.Output,
+ P2.Output
+ ) {
+ guard input.path.count >= 4 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ return (o1, o2)
+ }
+}
+
+extension PathZipVOOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P0.Output == Void,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P1.Output,
+ P2.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print(output.0))
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3
+ ) -> PathZipVOOV {
+ PathZipVOOV(p0, p1, p2, p3)
+ }
+}
+
+public struct PathZipVOVO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P0.Output == Void,
+ P2.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P1.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 4 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ return (o1, o3)
+ }
+}
+
+extension PathZipVOVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P0.Output == Void,
+ P2.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P1.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p3.print(output.1))
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.0))
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3
+ ) -> PathZipVOVO {
+ PathZipVOVO(p0, p1, p2, p3)
+ }
+}
+
+public struct PathZipVOVV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P0.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P1.Output
+ ) {
+ guard input.path.count >= 4 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ return (o1)
+ }
+}
+
+extension PathZipVOVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P0.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P1.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output))
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3
+ ) -> PathZipVOVV {
+ PathZipVOVV(p0, p1, p2, p3)
+ }
+}
+
+public struct PathZipVVOO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P0.Output == Void,
+ P1.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P2.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 4 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ return (o2, o3)
+ }
+}
+
+extension PathZipVVOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P0.Output == Void,
+ P1.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P2.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p3.print(output.1))
+ input.path.prepend(try p2.print(output.0))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3
+ ) -> PathZipVVOO {
+ PathZipVVOO(p0, p1, p2, p3)
+ }
+}
+
+public struct PathZipVVOV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P0.Output == Void,
+ P1.Output == Void,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P2.Output
+ ) {
+ guard input.path.count >= 4 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ return (o2)
+ }
+}
+
+extension PathZipVVOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P0.Output == Void,
+ P1.Output == Void,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P2.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3
+ ) -> PathZipVVOV {
+ PathZipVVOV(p0, p1, p2, p3)
+ }
+}
+
+public struct PathZipVVVO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P0.Output == Void,
+ P1.Output == Void,
+ P2.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P3.Output
+ ) {
+ guard input.path.count >= 4 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ return (o3)
+ }
+}
+
+extension PathZipVVVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P0.Output == Void,
+ P1.Output == Void,
+ P2.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p3.print(output))
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3
+ ) -> PathZipVVVO {
+ PathZipVVVO(p0, p1, p2, p3)
+ }
+}
+
+public struct PathZipVVVV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P0.Output == Void,
+ P1.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws {
+ guard input.path.count >= 4 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ return ()
+ }
+}
+
+extension PathZipVVVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P0.Output == Void,
+ P1.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3
+ ) -> PathZipVVVV {
+ PathZipVVVV(p0, p1, p2, p3)
+ }
+}
+
+public struct PathZipOOOOO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P3.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o2, o3, o4)
+ }
+}
+
+extension PathZipOOOOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P3.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print(output.4))
+ input.path.prepend(try p3.print(output.3))
+ input.path.prepend(try p2.print(output.2))
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipOOOOO {
+ PathZipOOOOO(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipOOOOV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o2, o3)
+ }
+}
+
+extension PathZipOOOOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print(output.3))
+ input.path.prepend(try p2.print(output.2))
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipOOOOV {
+ PathZipOOOOV(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipOOOVO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o2, o4)
+ }
+}
+
+extension PathZipOOOVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print(output.3))
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.2))
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipOOOVO {
+ PathZipOOOVO(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipOOOVV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P2.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o2)
+ }
+}
+
+extension PathZipOOOVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P2.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.2))
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipOOOVV {
+ PathZipOOOVV(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipOOVOO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P2.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P3.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o3, o4)
+ }
+}
+
+extension PathZipOOVOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P2.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P3.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print(output.3))
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipOOVOO {
+ PathZipOOVOO(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipOOVOV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P2.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o3)
+ }
+}
+
+extension PathZipOOVOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P2.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipOOVOV {
+ PathZipOOVOV(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipOOVVO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o4)
+ }
+}
+
+extension PathZipOOVVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print(output.2))
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipOOVVO {
+ PathZipOOVVO(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipOOVVV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P2.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1)
+ }
+}
+
+extension PathZipOOVVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P2.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipOOVVV {
+ PathZipOOVVV(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipOVOOO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P1.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P2.Output,
+ P3.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o2, o3, o4)
+ }
+}
+
+extension PathZipOVOOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P1.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P2.Output,
+ P3.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print(output.3))
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipOVOOO {
+ PathZipOVOOO(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipOVOOV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P1.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P2.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o2, o3)
+ }
+}
+
+extension PathZipOVOOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P1.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P2.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipOVOOV {
+ PathZipOVOOV(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipOVOVO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P1.Output == Void,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P2.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o2, o4)
+ }
+}
+
+extension PathZipOVOVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P1.Output == Void,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P2.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print(output.2))
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipOVOVO {
+ PathZipOVOVO(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipOVOVV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P1.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P2.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o2)
+ }
+}
+
+extension PathZipOVOVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P1.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P2.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipOVOVV {
+ PathZipOVOVV(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipOVVOO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P1.Output == Void,
+ P2.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P3.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o3, o4)
+ }
+}
+
+extension PathZipOVVOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P1.Output == Void,
+ P2.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P3.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print(output.2))
+ input.path.prepend(try p3.print(output.1))
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipOVVOO {
+ PathZipOVVOO(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipOVVOV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P1.Output == Void,
+ P2.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o3)
+ }
+}
+
+extension PathZipOVVOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P1.Output == Void,
+ P2.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print(output.1))
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipOVVOV {
+ PathZipOVVOV(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipOVVVO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P1.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o4)
+ }
+}
+
+extension PathZipOVVVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P1.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print(output.1))
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipOVVVO {
+ PathZipOVVVO(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipOVVVV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P1.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0)
+ }
+}
+
+extension PathZipOVVVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P1.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipOVVVV {
+ PathZipOVVVV(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipVOOOO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P0.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P1.Output,
+ P2.Output,
+ P3.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o1, o2, o3, o4)
+ }
+}
+
+extension PathZipVOOOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P0.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P1.Output,
+ P2.Output,
+ P3.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print(output.3))
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print(output.0))
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipVOOOO {
+ PathZipVOOOO(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipVOOOV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P0.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P1.Output,
+ P2.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o1, o2, o3)
+ }
+}
+
+extension PathZipVOOOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P0.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P1.Output,
+ P2.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print(output.0))
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipVOOOV {
+ PathZipVOOOV(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipVOOVO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P0.Output == Void,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P1.Output,
+ P2.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o1, o2, o4)
+ }
+}
+
+extension PathZipVOOVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P0.Output == Void,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P1.Output,
+ P2.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print(output.2))
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print(output.0))
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipVOOVO {
+ PathZipVOOVO(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipVOOVV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P0.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P1.Output,
+ P2.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o1, o2)
+ }
+}
+
+extension PathZipVOOVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P0.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P1.Output,
+ P2.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print(output.0))
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipVOOVV {
+ PathZipVOOVV(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipVOVOO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P0.Output == Void,
+ P2.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P1.Output,
+ P3.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o1, o3, o4)
+ }
+}
+
+extension PathZipVOVOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P0.Output == Void,
+ P2.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P1.Output,
+ P3.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print(output.2))
+ input.path.prepend(try p3.print(output.1))
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.0))
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipVOVOO {
+ PathZipVOVOO(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipVOVOV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P0.Output == Void,
+ P2.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P1.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o1, o3)
+ }
+}
+
+extension PathZipVOVOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P0.Output == Void,
+ P2.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P1.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print(output.1))
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.0))
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipVOVOV {
+ PathZipVOVOV(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipVOVVO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P0.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P1.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o1, o4)
+ }
+}
+
+extension PathZipVOVVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P0.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P1.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print(output.1))
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.0))
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipVOVVO {
+ PathZipVOVVO(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipVOVVV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P0.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P1.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o1)
+ }
+}
+
+extension PathZipVOVVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P0.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P1.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output))
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipVOVVV {
+ PathZipVOVVV(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipVVOOO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P0.Output == Void,
+ P1.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P2.Output,
+ P3.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o2, o3, o4)
+ }
+}
+
+extension PathZipVVOOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P0.Output == Void,
+ P1.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P2.Output,
+ P3.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print(output.2))
+ input.path.prepend(try p3.print(output.1))
+ input.path.prepend(try p2.print(output.0))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipVVOOO {
+ PathZipVVOOO(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipVVOOV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P0.Output == Void,
+ P1.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P2.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o2, o3)
+ }
+}
+
+extension PathZipVVOOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P0.Output == Void,
+ P1.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P2.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print(output.1))
+ input.path.prepend(try p2.print(output.0))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipVVOOV {
+ PathZipVVOOV(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipVVOVO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P0.Output == Void,
+ P1.Output == Void,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P2.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o2, o4)
+ }
+}
+
+extension PathZipVVOVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P0.Output == Void,
+ P1.Output == Void,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P2.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print(output.1))
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.0))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipVVOVO {
+ PathZipVVOVO(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipVVOVV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P0.Output == Void,
+ P1.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P2.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o2)
+ }
+}
+
+extension PathZipVVOVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P0.Output == Void,
+ P1.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P2.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipVVOVV {
+ PathZipVVOVV(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipVVVOO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P0.Output == Void,
+ P1.Output == Void,
+ P2.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P3.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o3, o4)
+ }
+}
+
+extension PathZipVVVOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P0.Output == Void,
+ P1.Output == Void,
+ P2.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P3.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print(output.1))
+ input.path.prepend(try p3.print(output.0))
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipVVVOO {
+ PathZipVVVOO(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipVVVOV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P0.Output == Void,
+ P1.Output == Void,
+ P2.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P3.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o3)
+ }
+}
+
+extension PathZipVVVOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P0.Output == Void,
+ P1.Output == Void,
+ P2.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print(output))
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipVVVOV {
+ PathZipVVVOV(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipVVVVO: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P0.Output == Void,
+ P1.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P4.Output
+ ) {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return (o4)
+ }
+}
+
+extension PathZipVVVVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P0.Output == Void,
+ P1.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print(output))
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipVVVVO {
+ PathZipVVVVO(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipVVVVV: Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P0.Output == Void,
+ P1.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws {
+ guard input.path.count >= 5 else { throw RoutingError() }
+ try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ return ()
+ }
+}
+
+extension PathZipVVVVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P0.Output == Void,
+ P1.Output == Void,
+ P2.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print())
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4
+ ) -> PathZipVVVVV {
+ PathZipVVVVV(p0, p1, p2, p3, p4)
+ }
+}
+
+public struct PathZipOOOOOO:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P3.Output,
+ P4.Output,
+ P5.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ let o5 = try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o2, o3, o4, o5)
+ }
+}
+
+extension PathZipOOOOOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P3.Output,
+ P4.Output,
+ P5.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print(output.5))
+ input.path.prepend(try p4.print(output.4))
+ input.path.prepend(try p3.print(output.3))
+ input.path.prepend(try p2.print(output.2))
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOOOOOO {
+ PathZipOOOOOO(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOOOOOV:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P5.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P3.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o2, o3, o4)
+ }
+}
+
+extension PathZipOOOOOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P5.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P3.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print())
+ input.path.prepend(try p4.print(output.4))
+ input.path.prepend(try p3.print(output.3))
+ input.path.prepend(try p2.print(output.2))
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOOOOOV {
+ PathZipOOOOOV(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOOOOVO:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P3.Output,
+ P5.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ let o5 = try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o2, o3, o5)
+ }
+}
+
+extension PathZipOOOOVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P3.Output,
+ P5.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print(output.4))
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print(output.3))
+ input.path.prepend(try p2.print(output.2))
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOOOOVO {
+ PathZipOOOOVO(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOOOOVV:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P4.Output == Void,
+ P5.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o2, o3)
+ }
+}
+
+extension PathZipOOOOVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P4.Output == Void,
+ P5.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print())
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print(output.3))
+ input.path.prepend(try p2.print(output.2))
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOOOOVV {
+ PathZipOOOOVV(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOOOVOO:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P4.Output,
+ P5.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ let o5 = try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o2, o4, o5)
+ }
+}
+
+extension PathZipOOOVOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P4.Output,
+ P5.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print(output.4))
+ input.path.prepend(try p4.print(output.3))
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.2))
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOOOVOO {
+ PathZipOOOVOO(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOOOVOV:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P3.Output == Void,
+ P5.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o2, o4)
+ }
+}
+
+extension PathZipOOOVOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P3.Output == Void,
+ P5.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print())
+ input.path.prepend(try p4.print(output.3))
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.2))
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOOOVOV {
+ PathZipOOOVOV(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOOOVVO:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P5.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ let o5 = try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o2, o5)
+ }
+}
+
+extension PathZipOOOVVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P2.Output,
+ P5.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print(output.3))
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.2))
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOOOVVO {
+ PathZipOOOVVO(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOOOVVV:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P3.Output == Void,
+ P4.Output == Void,
+ P5.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P2.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o2)
+ }
+}
+
+extension PathZipOOOVVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P3.Output == Void,
+ P4.Output == Void,
+ P5.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P2.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print())
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.2))
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOOOVVV {
+ PathZipOOOVVV(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOOVOOO:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P2.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P3.Output,
+ P4.Output,
+ P5.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ let o5 = try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o3, o4, o5)
+ }
+}
+
+extension PathZipOOVOOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P2.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P3.Output,
+ P4.Output,
+ P5.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print(output.4))
+ input.path.prepend(try p4.print(output.3))
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOOVOOO {
+ PathZipOOVOOO(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOOVOOV:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P2.Output == Void,
+ P5.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P3.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o3, o4)
+ }
+}
+
+extension PathZipOOVOOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P2.Output == Void,
+ P5.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P3.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print())
+ input.path.prepend(try p4.print(output.3))
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOOVOOV {
+ PathZipOOVOOV(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOOVOVO:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P2.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P3.Output,
+ P5.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ let o5 = try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o3, o5)
+ }
+}
+
+extension PathZipOOVOVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P2.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P3.Output,
+ P5.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print(output.3))
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOOVOVO {
+ PathZipOOVOVO(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOOVOVV:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P2.Output == Void,
+ P4.Output == Void,
+ P5.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o3)
+ }
+}
+
+extension PathZipOOVOVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P2.Output == Void,
+ P4.Output == Void,
+ P5.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print())
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOOVOVV {
+ PathZipOOVOVV(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOOVVOO:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P4.Output,
+ P5.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ let o5 = try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o4, o5)
+ }
+}
+
+extension PathZipOOVVOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P2.Output == Void,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P4.Output,
+ P5.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print(output.3))
+ input.path.prepend(try p4.print(output.2))
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOOVVOO {
+ PathZipOOVVOO(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOOVVOV:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P2.Output == Void,
+ P3.Output == Void,
+ P5.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o4)
+ }
+}
+
+extension PathZipOOVVOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P2.Output == Void,
+ P3.Output == Void,
+ P5.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print())
+ input.path.prepend(try p4.print(output.2))
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOOVVOV {
+ PathZipOOVVOV(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOOVVVO:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P2.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output,
+ P5.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ let o5 = try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1, o5)
+ }
+}
+
+extension PathZipOOVVVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P2.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output,
+ P5.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print(output.2))
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOOVVVO {
+ PathZipOOVVVO(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOOVVVV:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P2.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void,
+ P5.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P1.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ let o1 = try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o1)
+ }
+}
+
+extension PathZipOOVVVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P2.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void,
+ P5.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P1.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print())
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print())
+ input.path.prepend(try p1.print(output.1))
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOOVVVV {
+ PathZipOOVVVV(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOVOOOO:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P1.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P2.Output,
+ P3.Output,
+ P4.Output,
+ P5.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ let o5 = try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o2, o3, o4, o5)
+ }
+}
+
+extension PathZipOVOOOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P1.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P2.Output,
+ P3.Output,
+ P4.Output,
+ P5.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print(output.4))
+ input.path.prepend(try p4.print(output.3))
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOVOOOO {
+ PathZipOVOOOO(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOVOOOV:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P1.Output == Void,
+ P5.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P2.Output,
+ P3.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o2, o3, o4)
+ }
+}
+
+extension PathZipOVOOOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P1.Output == Void,
+ P5.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P2.Output,
+ P3.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print())
+ input.path.prepend(try p4.print(output.3))
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOVOOOV {
+ PathZipOVOOOV(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOVOOVO:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P1.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P2.Output,
+ P3.Output,
+ P5.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ let o5 = try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o2, o3, o5)
+ }
+}
+
+extension PathZipOVOOVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P1.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P2.Output,
+ P3.Output,
+ P5.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print(output.3))
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOVOOVO {
+ PathZipOVOOVO(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOVOOVV:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P1.Output == Void,
+ P4.Output == Void,
+ P5.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P2.Output,
+ P3.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ let o3 = try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o2, o3)
+ }
+}
+
+extension PathZipOVOOVV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P1.Output == Void,
+ P4.Output == Void,
+ P5.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P2.Output,
+ P3.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print())
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print(output.2))
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOVOOVV {
+ PathZipOVOOVV(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOVOVOO:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P1.Output == Void,
+ P3.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P2.Output,
+ P4.Output,
+ P5.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ let o5 = try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o2, o4, o5)
+ }
+}
+
+extension PathZipOVOVOO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P1.Output == Void,
+ P3.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P2.Output,
+ P4.Output,
+ P5.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print(output.3))
+ input.path.prepend(try p4.print(output.2))
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOVOVOO {
+ PathZipOVOVOO(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOVOVOV:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P1.Output == Void,
+ P3.Output == Void,
+ P5.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P2.Output,
+ P4.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ let o4 = try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o2, o4)
+ }
+}
+
+extension PathZipOVOVOV: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P1.Output == Void,
+ P3.Output == Void,
+ P5.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P2.Output,
+ P4.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print())
+ input.path.prepend(try p4.print(output.2))
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOVOVOV {
+ PathZipOVOVOV(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOVOVVO:
+ Parser
+where
+ P0.Input == Substring,
+ P1.Input == Substring,
+ P2.Input == Substring,
+ P3.Input == Substring,
+ P4.Input == Substring,
+ P5.Input == Substring,
+ P1.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ public let p0: P0, p1: P1, p2: P2, p3: P3, p4: P4, p5: P5
+
+ @inlinable public init(_ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5) {
+ self.p0 = p0
+ self.p1 = p1
+ self.p2 = p2
+ self.p3 = p3
+ self.p4 = p4
+ self.p5 = p5
+ }
+
+ @inlinable public func parse(_ input: inout URLRequestData) throws -> (
+ P0.Output,
+ P2.Output,
+ P5.Output
+ ) {
+ guard input.path.count >= 6 else { throw RoutingError() }
+ let o0 = try Parse {
+ p0
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p1
+ End()
+ }.parse(input.path.removeFirst())
+ let o2 = try Parse {
+ p2
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p3
+ End()
+ }.parse(input.path.removeFirst())
+ try Parse {
+ p4
+ End()
+ }.parse(input.path.removeFirst())
+ let o5 = try Parse {
+ p5
+ End()
+ }.parse(input.path.removeFirst())
+ return (o0, o2, o5)
+ }
+}
+
+extension PathZipOVOVVO: ParserPrinter
+where
+ P0: ParserPrinter,
+ P1: ParserPrinter,
+ P2: ParserPrinter,
+ P3: ParserPrinter,
+ P4: ParserPrinter,
+ P5: ParserPrinter,
+ P1.Output == Void,
+ P3.Output == Void,
+ P4.Output == Void
+{
+ @inlinable public func print(
+ _ output: (
+ P0.Output,
+ P2.Output,
+ P5.Output
+ ),
+ into input: inout URLRequestData
+ ) rethrows {
+ input.path.prepend(try p5.print(output.2))
+ input.path.prepend(try p4.print())
+ input.path.prepend(try p3.print())
+ input.path.prepend(try p2.print(output.1))
+ input.path.prepend(try p1.print())
+ input.path.prepend(try p0.print(output.0))
+ }
+}
+
+extension PathBuilder {
+ @inlinable public static func buildBlock(
+ _ p0: P0, _ p1: P1, _ p2: P2, _ p3: P3, _ p4: P4, _ p5: P5
+ ) -> PathZipOVOVVO {
+ PathZipOVOVVO(p0, p1, p2, p3, p4, p5)
+ }
+}
+
+public struct PathZipOVOVVV