Crate wasmcloud_provider_core[−][src]
wasmcloud Provider Core
This library provides the core set of types and associated functions used for the common set of functionality required for the wasmcloud host to manipulate capability providers and for developers to create their own providers.
Example
The following illustrates an example of the simplest capability provider
use wasmcloud_provider_core as provider; use wasmcloud_actor_core as actor; use provider::{CapabilityProvider, Dispatcher, NullDispatcher, serialize, core::{OP_BIND_ACTOR, OP_HEALTH_REQUEST, OP_REMOVE_ACTOR, SYSTEM_ACTOR}}; use actor::{CapabilityConfiguration, HealthCheckResponse}; use std::sync::{Arc, RwLock}; use std::error::Error; // Hello world implementation of the `demo:hello` capability provider #[derive(Clone)] pub struct HelloProvider { dispatcher: Arc<RwLock<Box<dyn Dispatcher>>>, } const OP_HELLO: &str = "DoHello"; impl Default for HelloProvider { fn default() -> Self { HelloProvider { dispatcher: Arc::new(RwLock::new(Box::new(NullDispatcher::new()))), } } } impl CapabilityProvider for HelloProvider { // Invoked by the runtime host to give this provider plugin the ability to communicate // with actors fn configure_dispatch( &self, dispatcher: Box<dyn Dispatcher>, ) -> Result<(), Box<dyn Error + Sync + Send>> { let mut lock = self.dispatcher.write().unwrap(); *lock = dispatcher; Ok(()) } // Invoked by host runtime to allow an actor to make use of the capability // All providers MUST handle the "configure" message, even if no work will be done fn handle_call( &self, actor: &str, op: &str, msg: &[u8], ) -> Result<Vec<u8>, Box<dyn Error + Sync + Send>> { match op { OP_BIND_ACTOR if actor == SYSTEM_ACTOR => Ok(vec![]), OP_REMOVE_ACTOR if actor == SYSTEM_ACTOR => Ok(vec![]), OP_HEALTH_REQUEST if actor == SYSTEM_ACTOR => Ok(serialize(HealthCheckResponse { healthy: true, message: "".to_string(), }) .unwrap()), OP_HELLO => Ok(b"Hello, World".to_vec()), _ => Err(format!("Unknown operation: {}", op).into()), } } // No cleanup needed on stop fn stop(&self) {} }
Re-exports
pub use capabilities::*; |
Modules
capabilities | Common types used for managing native capability providers |
core | Core Constants |
Macros
capability_provider | Wraps a constructor inside an FFI function to allow the |
Functions
deserialize | The agreed-upon standard for payload de-serialization (message pack) |
serialize | The agreed-upon standard for payload serialization (message pack) |