update gradle plugin version to fix build (#49)

2 files changed
tree: 62b01de761d65b0f82178305722a8b3f5aad8964
  1. .github/
  2. core/
  3. example/
  4. gradle/
  5. tests/
  6. tools/
  7. .asf.yaml
  8. .gitattributes
  9. .gitignore
  10. .scalafmt.conf
  11. build.gradle
  12. CONTRIBUTING.md
  13. gradlew
  14. gradlew.bat
  15. LICENSE.txt
  16. NOTICE.txt
  17. README.md
  18. settings.gradle
README.md

Apache OpenWhisk Runtime for Rust

License Continuous Integration

Give it a try today

To use as a Docker action:

wsk action update myAction my_action.rs --docker openwhisk/action-rust-v1.34

The file my_action.rs looks like:

extern crate serde_json;

use serde_derive::{Deserialize, Serialize};
use serde_json::{Error, Value};

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
struct Input {
    #[serde(default = "stranger")]
    name: String,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
struct Output {
    body: String,
}

fn stranger() -> String {
    "stranger".to_string()
}

pub fn main(args: Value) -> Result<Value, Error> {
    let input: Input = serde_json::from_value(args)?;
    let output = Output {
        body: format!("Hello, {}", input.name),
    };
    serde_json::to_value(output)
}

The action is mainly composed by a main function that accepts a JSON serdes Value as input and returns a Result including a JSON serde Value.

For the return result, not only support A JSON serde Value but also support Array serde Value

So a simple hello array funtion would be:

extern crate serde_json;

use serde_derive::{Deserialize, Serialize};
use serde_json::{Error, Value};


pub fn main(args: Value) -> Result<Value, Error> {
    let output = ["a", "b"];
    serde_json::to_value(output)
}

And support array result for sequence action as well, the first action‘s array result can be used as next action’s input parameter.

So the function can be:

extern crate serde_json;

use serde_derive::{Deserialize, Serialize};
use serde_json::{Error, Value};


pub fn main(args: Value) -> Result<Value, Error> {
    let inputParam = args.as_array();
    let defaultOutput = ["c", "d"];
    match inputParam {
        None => serde_json::to_value(defaultOutput),
        Some(x) => serde_json::to_value(x),
    }
}

Managing dependencies

If your action needs external dependencies, you need to provide a zip file including your source, and your cargo file with all your dependencies. The folder structure is the following:

|- Cargo.toml
|- src
    |- lib.rs

Here is an example of a Cargo.toml file

[package]
name = "actions"
version = "0.1.0"
authors = ["John Doe <john@doe.domain>"]
edition = "2018"

[dependencies]
serde_json = "1.0"
serde = "1.0"
serde_derive = "1.0"

Once you have all your code zipped in a file with the showed folder structure you can generate your action with the following command:

wsk action create yourAction /full_path_to/yourCode.zip --docker openwhisk/action-rust-v1.34