I am happy to announce version 0.14.0 of async-stripe (https://payments.rs) which introduces a number of new features. async-stripe is a client for the stripe API with a bring-your-own-runtime approach. It will work with whatever stack you use.
On a personal note, having worked on this project for over a year now, this is the first release where I feel like the ergonomics, features, and Stripe api coverage are finally getting 'good'.
Changelog: https://github.com/arlyon/async-stripe/releases/tag/v0.14.0
breaking - fluent client config: you can set the client id, stripe account, and strategy with a new builder-style api
improved the codegen to expand api coverage: we added `card` to the api!
added `Default` across the codebase: we added default in many more places
opt-in auto-retry functionality following the stripe retry headers: the client will retry failed requests
opt-in idempotency: manual verification and retry if needed
improve test coverage: we added tarpaulin and started tracking coverage. from now on new contributions will be expected to be tested properly, and we will be adding extensive examples
piles of examples: we have a whole load of shiny examples to look at, along with example-doc linking to put the examples straight alongside the code in docs.rs. very happy with the ergonomics here.
As mentioned, we also opted in to try out RFC 3123: https://rust-lang.github.io/rfcs/3123-rustdoc-scrape-examples.html which has been a dream. Some examples:
PaymentIntent::create: https://docs.rs/async-stripe/0.14.0/stripe/struct.PaymentIntent.html#method.create
AccountLink::create: https://docs.rs/async-stripe/0.14.0/stripe/struct.AccountLink.html#method.create
Customer::list: https://docs.rs/async-stripe/0.14.0/stripe/struct.Customer.html#method.list
Additionally, Stripe have begun to sponsor the project which, while the project is still not affiliated with Stripe, or considered a Stripe product, marks a very cool moment in the project history and my own career. With the support I've been able to get a domain, send out some swag to the contributors, and plan on running some rust workshops in London.
That said, we still have some challenges. For this project, compile time has always been a fundamental trade-off. a) there is a lot of generated code and b) there is an obscene amount of macro-expansion code (mainly serde). These together make for awful compile times. For 0.15, we plan to group the generated code into individual crates so that there are more compilation units. Additionally, we are thinking about how to reduce the reliance on macro expansion by potentially replacing serde with something more lightweight. If you have ideas and want to join the conversation, please hop in here: https://github.com/arlyon/async-stripe/discussions/77
Looking forward for any and all feedback or questions
Cheers
Alex
Conversation on /r/rust: https://www.reddit.com/r/rust/comments/tqid6w/announcing_asyncstripe_014_a_rust_client_to/