Comments (2)
Thanks for suggestion @PangMo5 - I'd definitely love if we could support this!
At one point I actually had the @Default
functionality as you suggested but unfortunately we lost the ability to do that in the Xcode 15 Beta update that post you linked is about.
Also unfortunately, Swift doesn't support either default arguments (your first example) or property wrappers (potential other implementation) in protocol definitions yet. I don't believe there is another way to do it, otherwise I'd be very open to it. If you have any ideas of how this could be accomplished let me know!
For now, however, you can achieve the desired effect using (albeit verbose) extensions.
@API
protocol Users {
@GET("/users")
func getList(size: Int, cursor: String?) async throws -> [User]
@POST("/user")
func createUser(email: String, password: String, nickname: String?) async throws
}
// note that the @GET / other macros aren't needed in the extension.
extension Users {
func getList(size: Int = 20, cursor: String?) async throws -> [User] {
try await getList(size: size, cursor: cursor)
}
func createUser(email: String, password: String, nickname: String? = nil) async throws {
try await createUser(email: email, password: password, nickname: nickname)
}
}
Again - this is pretty verbose and I think your first example is the ideal solution, but default arguments aren't currently allowed in protocols.
from papyrus.
@joshuawright11 ,
Is it possible to generate such Users extension by something like that?
@API
protocol Users {
@GET("/users", defaults: ["size": 20])
func getList(size: Int, cursor: String?) async throws -> [User]
@POST("/user", defaults: ["nickname": nil])
func createUser(email: String, password: String, nickname: String?) async throws
}
Looks not very type safe but probably we can match keys from defaults
with endpoint's ages and verify values with appropriate types as well (and throw error if needed).
from papyrus.
Related Issues (20)
- Failed to resolve dependencies HOT 2
- POST & Query does not work HOT 2
- Feature: Ability to decode error response HOT 6
- Invalid request URL when baseURL is missing trailing `/` HOT 1
- Add URLSession based driver HOT 2
- Allow returning `Data` as a response type HOT 2
- @JSON encoder argument HOT 1
- Void return value support HOT 1
- PapyrusAlamofire not working HOT 1
- Request Cancellation
- Request Progress
- Request Retry
- Multipart encoding not working HOT 1
- Unable to build project and apply custom JSON encoder and decoder HOT 1
- @JSON has no effect HOT 4
- Log Failed Request cURL HOT 3
- Request streaming HOT 2
- Automatically add default values for optional types HOT 1
- Error when trying to set path parameter in front of static query HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from papyrus.