Crates.io | lnurl |
lib.rs | lnurl |
version | 0.2.0 |
source | src |
created_at | 2019-11-10 13:24:53.881509 |
updated_at | 2021-06-19 16:34:58.237702 |
description | Helpers for LNURL |
homepage | |
repository | https://github.com/edouardparis/rust-lnurl.git |
max_upload_size | |
id | 179929 |
size | 58,074 |
Readings about lnurl
You will certainly need some crates like:
bech32 = "0.7.1"
lightning-invoice = "0.2.0"
serde = { version = "1.0.93", features =["derive"]}
serde_json = "1.0.39"
Create a bech32 QRCode:
use bech32::ToBase32;
use image::Luma;
use qrcode::QrCode;
pub fn create_lnurl_qrcode(url: &str, path: &str) {
let encoded = bech32::encode("lnurl", url.as_bytes().to_base32()).unwrap();
let code = QrCode::new(encoded.to_string()).unwrap();
let image = code.render::<Luma<u8>>().build();
image.save(path).unwrap();
}
Use serde_json to encode your LNRUL object in the HTTP response body of your server.
if let Err(_) = invoice.parse::<lightning_invoice::SignedRawInvoice>() {
let res = serde_json::to_string(
&lnurl::Response::Error{reason: "your invoice is wrong".to_string()}
).unwrap();
return Ok(Response::builder()
.status(StatusCode::BAD_REQUEST)
.header(header::CONTENT_TYPE, "application/json")
.body(Body::from(res)).unwrap())
}