2 unstable releases

new 0.5.0 Nov 9, 2024
0.4.0 Nov 7, 2023
0.2.0 Nov 9, 2024

#21 in Magic Beans

Download history 79/week @ 2024-07-22 44/week @ 2024-07-29 32/week @ 2024-08-05 13/week @ 2024-08-12 36/week @ 2024-08-19 7/week @ 2024-08-26 9/week @ 2024-09-02 9/week @ 2024-09-09 18/week @ 2024-09-16 34/week @ 2024-09-23 29/week @ 2024-09-30 8/week @ 2024-10-07 16/week @ 2024-10-14 56/week @ 2024-10-21 33/week @ 2024-10-28 298/week @ 2024-11-04

404 downloads per month

MIT license

400KB
11K SLoC

cln-rpc: Talk to Core Lightning


lib.rs:

A Core Lightning RPC-client

Core Lightning exposes a JSON-RPC interface over unix-domain sockets. The unix-domain socket appears like file and located by default in ~/.lightning/<network>/lightning-rpc.

This crate contains an RPC-client called [ClnRpc] and models for most requests and responses.

The example below shows how to initiate the client and celss the getinfo-rpc method.

use std::path::Path;
use tokio_test;
use cln_rpc::{ClnRpc, TypedRequest};
use cln_rpc::model::requests::GetinfoRequest;
use cln_rpc::model::responses::GetinfoResponse;

tokio_test::block_on( async {
    let path = Path::new("path_to_lightning_dir");
    let mut rpc = ClnRpc::new(path).await.unwrap();
    let request = GetinfoRequest {};
    let response : GetinfoResponse = rpc.call_typed(&request).await.unwrap();
});

If the required model is not available you can implement TypedRequest and use ClnRpc::call_typed without a problem.

use std::path::Path;
use tokio_test;
use cln_rpc::{ClnRpc, TypedRequest};
use serde::{Serialize, Deserialize};

#[derive(Serialize, Debug)]
struct CustomMethodRequest {
    param_a : String
};
#[derive(Deserialize, Debug)]
struct CustomMethodResponse {
    field_a : String
};

impl TypedRequest for CustomMethodRequest {
    type Response = CustomMethodResponse;

    fn method(&self) -> &str {
        "custommethod"
    }
}

tokio_test::block_on( async {
    let path = Path::new("path_to_lightning_dir");
    let mut rpc = ClnRpc::new(path).await.unwrap();

    let request = CustomMethodRequest { param_a : String::from("example")};
    let response = rpc.call_typed(&request).await.unwrap();
})

An alternative is to use ClnRpc::call_raw.

use std::path::Path;
use tokio_test;
use cln_rpc::{ClnRpc, TypedRequest};

tokio_test::block_on( async {
    let path = Path::new("path_to_lightning_dir");
    let mut rpc = ClnRpc::new(path).await.unwrap();
    let method = "custommethod";
    let request = serde_json::json!({"param_a" : "example"});
    let response : serde_json::Value = rpc.call_raw(method, &request).await.unwrap();
})

Dependencies

~11–20MB
~239K SLoC