azure-functions 0.1.3

Support for writing Azure Functions in Rust.
Documentation

Azure Functions for Rust

The Azure Functions for Rust crate supports writting Azure Functions in Rust.

The following Azure Functions trigger bindings are supported:

The following Azure Functions output bindings are supported:

Eventually more bindings will be implemented, including custom binding data.

Examples

Start by creating a new binary package:

$ cargo new --bin example

Edit Cargo.toml to include the following dependencies:

azure-functions = "0.1.3"
log = "0.4.2"

Azure Functions are implemented by applying a trigger attribute to a Rust function.

For example, let's create src/greet.rs that implements a HTTP triggered function by applying the func attribute:

# #![feature(proc_macro)] extern crate azure_functions;
# #[macro_use] extern crate log;
use azure_functions::func;
use azure_functions::bindings::{HttpRequest, HttpResponse};

#[func]
#[binding(name = "request", auth_level = "anonymous")]
pub fn greet(request: &HttpRequest) -> HttpResponse {
    // Log the request on the Azure Functions Host
    info!("Request: {:?}", request);

    // Return a formatted string as the response
    format!(
        "Hello from Rust, {}!",
        request.query_params().get("name").map_or("stranger", |x| x)
    ).into()
}

Replace the contents of src/main.rs with the following to register the function with the Azure Functions Host:

#![feature(proc_macro)]

#[macro_use]
extern crate log;
extern crate azure_functions;

mod greet;

// The main! macro generates an entrypoint for the binary
// Expects a list of Azure Functions to register with the Azure Functions host
azure_functions::main!{
    greet::greet
}

Run the application with the --create <root> option, where <root> is the path to the desired Azure Functions application root directory:

$ export AzureWebJobsScriptRoot=path-to-root
$ cargo run -q -- --create $AzureWebJobsScriptRoot

Run the Azure Functions Host:

$ cd azure-functions-host/src/WebJobs.Script.WebHost
$ dotnet run

The above Azure Function can be invoked with http://localhost:5000/api/greet?name=John.

The expected response would be Hello from Rust, John!.