From 4ec1780b09f2f1ed3bf8289aa19b34d3c6cf6d45 Mon Sep 17 00:00:00 2001 From: Tony Bark Date: Sat, 7 Dec 2024 17:40:10 -0500 Subject: [PATCH] init: extism --- .cargo/config.toml | 2 ++ .gitignore | 2 ++ Cargo.toml | 12 ++++++++++++ LICENSE | 28 ++++++++++++++++++++++++++++ README.md | 4 ++++ src/lib.rs | 28 ++++++++++++++++++++++++++++ 6 files changed, 76 insertions(+) create mode 100644 .cargo/config.toml create mode 100644 .gitignore create mode 100644 Cargo.toml create mode 100644 LICENSE create mode 100644 README.md create mode 100644 src/lib.rs diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..f4e8c00 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,2 @@ +[build] +target = "wasm32-unknown-unknown" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..96ef6c0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +Cargo.lock diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..c686e5e --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "rust-pdk-template" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[lib] +crate-type = ["cdylib"] + +[dependencies] +extism-pdk = "1.3.0" +serde = { version = "1", features = ["derive"] } diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4440418 --- /dev/null +++ b/LICENSE @@ -0,0 +1,28 @@ +BSD 3-Clause License + +Copyright (c) 2024, Extism + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..6153bbe --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# Extism Rust PDK Plugin + +See more documentation at https://github.com/extism/rust-pdk and +[join us on Discord](https://extism.org/discord) for more help. diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..f30f255 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,28 @@ +use extism_pdk::*; +use serde::{Deserialize, Serialize}; + +// start with something simple +#[plugin_fn] +pub fn greet(name: String) -> FnResult { + Ok(format!("Hello, {}!", name)) +} + +// use json data for inputs and outputs +#[derive(FromBytes, Deserialize, PartialEq, Debug)] +#[encoding(Json)] +struct Add { + left: i32, + right: i32, +} +#[derive(ToBytes, Serialize, PartialEq, Debug)] +#[encoding(Json)] +struct Sum { + value: i32, +} + +#[plugin_fn] +pub fn add(input: Add) -> FnResult { + Ok(Sum { + value: input.left + input.right, + }) +}