clightningrpc-plugin

Crates.ioclightningrpc-plugin
lib.rsclightningrpc-plugin
version0.3.0-beta.8
sourcesrc
created_at2022-07-29 23:23:02.542093
updated_at2023-06-13 09:32:56.194417
descriptionCrate that provides a plugin API to give the possibility to implement a plugin in Rust
homepagehttps://github.com/laanwj/rust-clightning-rpc
repositoryhttps://github.com/laanwj/rust-clightning-rpc.git
max_upload_size
id635243
size33,868
Vincenzo Palazzo (vincenzopalazzo)

documentation

README

Rust core lightning plugin crate

Crate that provides a procedural API to develop cln plugins.

Project Homepage

GitHub Workflow Status (branch) Crates.io docs.rs

Crate that provides a procedural macros implementation to make easy to develop a plugin developer to build a plugin.

extern crate clightningrpc_plugin;

use clightningrpc_plugin::types::LogLevel;
use clightningrpc_plugin::{commands::RPCCommand, plugin::Plugin};
use serde_json::{json, Value};

#[derive(Clone)]
struct PluginState(());

/// HelloRPC is used to register the RPC method
#[derive(Clone)]
struct HelloRPC {}

/// Implementation of the RPC method
impl RPCCommand<PluginState> for HelloRPC {
    fn call<'c>(&self, plugin: &mut Plugin<PluginState>, _request: &'c Value) -> Value {
        plugin.log(LogLevel::Debug, "call the custom rpc method from rust");
        json!({
            "language": "Hello from rust"
        })
    }
}

#[derive(Clone)]
struct OnChannelOpened {}

impl RPCCommand<PluginState> for OnChannelOpened {
    fn call_void<'c>(&self, _plugin: &mut Plugin<PluginState>, _request: &'c Value) {
        _plugin.log(LogLevel::Debug, "A new channel was opened!");
    }
}

fn main() {
    let mut plugin = Plugin::<PluginState>::new(PluginState(()), true)
        .add_rpc_method(
            "hello",
            "",
            "show how is possible add a method",
            HelloRPC {},
        )
        .add_opt(
            "foo",
            "flag",
            None,
            "An example of command line option",
            false,
        )
        .register_notification("channel_opened", OnChannelOpened {})
        .clone();
    plugin.start();
}

Contributing guidelines

Read our Hacking guide

Supports

If you want support this library consider to donate with the following methods

Commit count: 282

cargo fmt