Initial stable release of Azure SDK for Rust
I’m excited to announce our initial stable release of the Azure SDK for Rust! 🎉
Besides the core libraries, we made the following crates generally available (GA):
- azure_storage_blob
- azure_storage_queue
- azure_security_keyvault_secrets
- azure_security_keyvault_keys
- azure_security_keyvault_certificates
azure_data_cosmos and azure_messaging_eventhubs will be available soon.
Getting Started
We have a lot of great examples in our azure_core documentation. You can also find other azure_core examples in our repository.
Extensibility
Rust doesn’t have a lot in its standard library - not even an async executor. Thus, applications need to pick an executor. While tokio is the most common async executor - and on which our default HTTP client, reqwest is based - there are other executors and HTTP clients applications may want to use. Azure service have to use a platform called Oxidizer - some of which is public - that provides an async executor optimized for running Azure services.
Thus, we support replacing the async executor and/or the HTTP client, along with customizing the default reqwest::HttpClient or even just adding HTTP policies like with all our Azure SDK languages.
See our cross-cutting samples.
Origins
This started as passion project. I had been writing Rust for a while but wanted something substantial to work on. I started the original Azure/azure-sdk-for-rust repo. Not long after, some colleagues heard about this and had been working on some unofficial crates that MindFlavor started. I ended up archiving my project and we forked his in its place. It went through a lot of changes to align with our Azure SDK general guidelines while I started working on the initial Rust guidelines.
As people moved on and the project was made official, I was named the architect and started prototyping many different ideas based on popular Rust projects. Anyone that tells you there is decidedly an “idiomatic Rust” is wrong. There are certainly common patterns, but with no clear language guidelines/recommendations like some other languages, there are lots of popular patterns from simple struct initialization, builders, typestate builders, and more. After going through some patterns with other architects, Rustaceans in the company, and people just starting to learn Rust - we want this to be approachable - we settled on a pattern.
While I tried to maintain as much legacy as possible, some radical change was necessary. At that point, I moved the existing code to that point into the legacy branch. If we needed to make any critical security fixes, we still could. But development continued on in the main branch.
Thanks
I can’t thank enough the people who bootstrapped all this effort: Francesco, Ryan, Cameron, Brian, et. al. And for the people who took up the mantle when this was made an official project: Larry, Joel, Rick, Ashley, Anton, Ronnie, Patrick, Brian, et. al.