#plugin #plugin-api #lightning #bitcoin #cln #rpc

clightningrpc-plugin

Crate that provides a plugin API to give the possibility to implement a plugin in Rust

8 releases

0.3.0-beta.8 Jun 13, 2023
0.3.0-beta.7 Jan 7, 2023
0.3.0-beta.6 Nov 18, 2022
0.3.0-beta.5 Sep 3, 2022
0.1.0-beta.1 Jul 29, 2022

#6 in #cln

Download history 163/week @ 2023-12-23 92/week @ 2023-12-30 15/week @ 2024-01-20 4/week @ 2024-01-27 164/week @ 2024-02-03 110/week @ 2024-02-10 117/week @ 2024-02-17 162/week @ 2024-02-24 32/week @ 2024-03-02 67/week @ 2024-03-09 103/week @ 2024-03-16 149/week @ 2024-03-23 61/week @ 2024-03-30 66/week @ 2024-04-06

388 downloads per month
Used in clightningrpc-plugin-macr…

CC0 license

39KB
685 lines

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

Dependencies

~0.7–1.5MB
~33K SLoC