mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-21 16:14:23 +01:00
cln-grpc: Map AmountOrAll and AmountOrAny
This commit is contained in:
committed by
Rusty Russell
parent
04e7e285d7
commit
bba68e2136
@@ -558,7 +558,7 @@ message DelinvoiceResponse {
|
|||||||
}
|
}
|
||||||
|
|
||||||
message InvoiceRequest {
|
message InvoiceRequest {
|
||||||
Amount msatoshi = 1;
|
AmountOrAny msatoshi = 1;
|
||||||
string description = 2;
|
string description = 2;
|
||||||
string label = 3;
|
string label = 3;
|
||||||
repeated string fallbacks = 4;
|
repeated string fallbacks = 4;
|
||||||
@@ -910,7 +910,7 @@ message NewaddrResponse {
|
|||||||
|
|
||||||
message WithdrawRequest {
|
message WithdrawRequest {
|
||||||
bytes destination = 1;
|
bytes destination = 1;
|
||||||
optional Amount satoshi = 2;
|
optional AmountOrAll satoshi = 2;
|
||||||
optional Feerate feerate = 5;
|
optional Feerate feerate = 5;
|
||||||
optional uint32 minconf = 3;
|
optional uint32 minconf = 3;
|
||||||
repeated Utxo utxos = 4;
|
repeated Utxo utxos = 4;
|
||||||
|
|||||||
@@ -5,6 +5,20 @@ message Amount {
|
|||||||
uint64 msat = 1;
|
uint64 msat = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message AmountOrAll {
|
||||||
|
oneof value {
|
||||||
|
Amount amount = 1;
|
||||||
|
bool all = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
message AmountOrAny {
|
||||||
|
oneof value {
|
||||||
|
Amount amount = 1;
|
||||||
|
bool any = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
enum ChannelSide {
|
enum ChannelSide {
|
||||||
IN = 0;
|
IN = 0;
|
||||||
OUT = 1;
|
OUT = 1;
|
||||||
|
|||||||
@@ -1028,7 +1028,7 @@ impl From<&pb::DelinvoiceRequest> for requests::DelinvoiceRequest {
|
|||||||
impl From<&pb::InvoiceRequest> for requests::InvoiceRequest {
|
impl From<&pb::InvoiceRequest> for requests::InvoiceRequest {
|
||||||
fn from(c: &pb::InvoiceRequest) -> Self {
|
fn from(c: &pb::InvoiceRequest) -> Self {
|
||||||
Self {
|
Self {
|
||||||
msatoshi: c.msatoshi.as_ref().unwrap().into(), // Rule #1 for type msat
|
msatoshi: c.msatoshi.as_ref().unwrap().into(), // Rule #1 for type msat|any
|
||||||
description: c.description.clone(), // Rule #1 for type string
|
description: c.description.clone(), // Rule #1 for type string
|
||||||
label: c.label.clone(), // Rule #1 for type string
|
label: c.label.clone(), // Rule #1 for type string
|
||||||
fallbacks: c.fallbacks.iter().map(|s| s.into()).collect(),
|
fallbacks: c.fallbacks.iter().map(|s| s.into()).collect(),
|
||||||
@@ -1156,7 +1156,7 @@ impl From<&pb::WithdrawRequest> for requests::WithdrawRequest {
|
|||||||
fn from(c: &pb::WithdrawRequest) -> Self {
|
fn from(c: &pb::WithdrawRequest) -> Self {
|
||||||
Self {
|
Self {
|
||||||
destination: hex::encode(&c.destination), // Rule #1 for type pubkey
|
destination: hex::encode(&c.destination), // Rule #1 for type pubkey
|
||||||
satoshi: c.satoshi.as_ref().map(|a| a.into()), // Rule #1 for type msat?
|
satoshi: c.satoshi.as_ref().map(|a| a.into()), // Rule #1 for type msat|all?
|
||||||
feerate: c.feerate.as_ref().map(|a| a.into()), // Rule #1 for type feerate?
|
feerate: c.feerate.as_ref().map(|a| a.into()), // Rule #1 for type feerate?
|
||||||
minconf: c.minconf.map(|v| v as u16), // Rule #1 for type u16?
|
minconf: c.minconf.map(|v| v as u16), // Rule #1 for type u16?
|
||||||
utxos: c.utxos.iter().map(|s| s.into()).collect(),
|
utxos: c.utxos.iter().map(|s| s.into()).collect(),
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
tonic::include_proto!("cln");
|
tonic::include_proto!("cln");
|
||||||
|
|
||||||
use cln_rpc::primitives::{
|
use cln_rpc::primitives::{
|
||||||
Amount as JAmount, Feerate as JFeerate, OutputDesc as JOutputDesc, Utxo as JUtxo,
|
Amount as JAmount, AmountOrAll as JAmountOrAll, AmountOrAny as JAmountOrAny,
|
||||||
|
Feerate as JFeerate, OutputDesc as JOutputDesc, Utxo as JUtxo,
|
||||||
};
|
};
|
||||||
|
|
||||||
impl From<JAmount> for Amount {
|
impl From<JAmount> for Amount {
|
||||||
@@ -55,3 +56,48 @@ impl From<&OutputDesc> for JOutputDesc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<JAmountOrAll> for AmountOrAll {
|
||||||
|
fn from(a: JAmountOrAll) -> Self {
|
||||||
|
match a {
|
||||||
|
JAmountOrAll::Amount(a) => AmountOrAll {
|
||||||
|
value: Some(amount_or_all::Value::Amount(a.into())),
|
||||||
|
},
|
||||||
|
JAmountOrAll::All => AmountOrAll {
|
||||||
|
value: Some(amount_or_all::Value::All(true)),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<&AmountOrAll> for JAmountOrAll {
|
||||||
|
fn from(a: &AmountOrAll) -> Self {
|
||||||
|
match &a.value {
|
||||||
|
Some(amount_or_all::Value::Amount(a)) => JAmountOrAll::Amount(a.into()),
|
||||||
|
Some(amount_or_all::Value::All(_)) => JAmountOrAll::All,
|
||||||
|
None => panic!("AmountOrAll is neither amount nor all: {:?}", a),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<JAmountOrAny> for AmountOrAny {
|
||||||
|
fn from(a: JAmountOrAny) -> Self {
|
||||||
|
match a {
|
||||||
|
JAmountOrAny::Amount(a) => AmountOrAny {
|
||||||
|
value: Some(amount_or_any::Value::Amount(a.into())),
|
||||||
|
},
|
||||||
|
JAmountOrAny::Any => AmountOrAny {
|
||||||
|
value: Some(amount_or_any::Value::Any(true)),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl From<&AmountOrAny> for JAmountOrAny {
|
||||||
|
fn from(a: &AmountOrAny) -> Self {
|
||||||
|
match &a.value {
|
||||||
|
Some(amount_or_any::Value::Amount(a)) => JAmountOrAny::Amount(a.into()),
|
||||||
|
Some(amount_or_any::Value::Any(_)) => JAmountOrAny::Any,
|
||||||
|
None => panic!("AmountOrAll is neither amount nor any: {:?}", a),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ impl ClnRpc {
|
|||||||
// serde_json knows which variant of [`Request`] should be
|
// serde_json knows which variant of [`Request`] should be
|
||||||
// used.
|
// used.
|
||||||
response["method"] = req2["method"].clone();
|
response["method"] = req2["method"].clone();
|
||||||
|
log::warn!("XXX {:?}", response);
|
||||||
serde_json::from_value(response).context("converting response into enum")
|
serde_json::from_value(response).context("converting response into enum")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -321,7 +321,7 @@ pub mod requests {
|
|||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
pub struct InvoiceRequest {
|
pub struct InvoiceRequest {
|
||||||
#[serde(alias = "msatoshi")]
|
#[serde(alias = "msatoshi")]
|
||||||
pub msatoshi: Amount,
|
pub msatoshi: AmountOrAny,
|
||||||
#[serde(alias = "description")]
|
#[serde(alias = "description")]
|
||||||
pub description: String,
|
pub description: String,
|
||||||
#[serde(alias = "label")]
|
#[serde(alias = "label")]
|
||||||
@@ -477,7 +477,7 @@ pub mod requests {
|
|||||||
#[serde(alias = "destination")]
|
#[serde(alias = "destination")]
|
||||||
pub destination: String,
|
pub destination: String,
|
||||||
#[serde(alias = "satoshi", skip_serializing_if = "Option::is_none")]
|
#[serde(alias = "satoshi", skip_serializing_if = "Option::is_none")]
|
||||||
pub satoshi: Option<Amount>,
|
pub satoshi: Option<AmountOrAll>,
|
||||||
#[serde(alias = "feerate", skip_serializing_if = "Option::is_none")]
|
#[serde(alias = "feerate", skip_serializing_if = "Option::is_none")]
|
||||||
pub feerate: Option<Feerate>,
|
pub feerate: Option<Feerate>,
|
||||||
#[serde(alias = "minconf", skip_serializing_if = "Option::is_none")]
|
#[serde(alias = "minconf", skip_serializing_if = "Option::is_none")]
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ typemap = {
|
|||||||
'boolean': 'bool',
|
'boolean': 'bool',
|
||||||
'hex': 'bytes',
|
'hex': 'bytes',
|
||||||
'msat': 'Amount',
|
'msat': 'Amount',
|
||||||
|
'msat|all': 'AmountOrAll',
|
||||||
|
'msat|any': 'AmountOrAny',
|
||||||
'number': 'sint64',
|
'number': 'sint64',
|
||||||
'pubkey': 'bytes',
|
'pubkey': 'bytes',
|
||||||
'short_channel_id': 'string',
|
'short_channel_id': 'string',
|
||||||
@@ -395,6 +397,10 @@ class GrpcUnconverterGenerator(GrpcConverterGenerator):
|
|||||||
'pubkey?': f'c.{name}.clone().map(|v| hex::encode(v))',
|
'pubkey?': f'c.{name}.clone().map(|v| hex::encode(v))',
|
||||||
'msat': f'c.{name}.as_ref().unwrap().into()',
|
'msat': f'c.{name}.as_ref().unwrap().into()',
|
||||||
'msat?': f'c.{name}.as_ref().map(|a| a.into())',
|
'msat?': f'c.{name}.as_ref().map(|a| a.into())',
|
||||||
|
'msat|all': f'c.{name}.as_ref().unwrap().into()',
|
||||||
|
'msat|all?': f'c.{name}.as_ref().map(|a| a.into())',
|
||||||
|
'msat|any': f'c.{name}.as_ref().unwrap().into()',
|
||||||
|
'msat|any?': f'c.{name}.as_ref().map(|a| a.into())',
|
||||||
'feerate': f'c.{name}.as_ref().unwrap().into()',
|
'feerate': f'c.{name}.as_ref().unwrap().into()',
|
||||||
'feerate?': f'c.{name}.as_ref().map(|a| a.into())',
|
'feerate?': f'c.{name}.as_ref().map(|a| a.into())',
|
||||||
}.get(
|
}.get(
|
||||||
|
|||||||
@@ -224,6 +224,8 @@ class PrimitiveField(Field):
|
|||||||
"pubkey",
|
"pubkey",
|
||||||
"signature",
|
"signature",
|
||||||
"msat",
|
"msat",
|
||||||
|
"msat|any",
|
||||||
|
"msat|all",
|
||||||
"hex",
|
"hex",
|
||||||
"short_channel_id",
|
"short_channel_id",
|
||||||
"txid",
|
"txid",
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ typemap = {
|
|||||||
'boolean': 'bool',
|
'boolean': 'bool',
|
||||||
'hex': 'String',
|
'hex': 'String',
|
||||||
'msat': 'Amount',
|
'msat': 'Amount',
|
||||||
|
'msat|all': 'AmountOrAll',
|
||||||
|
'msat|any': 'AmountOrAny',
|
||||||
'number': 'i64',
|
'number': 'i64',
|
||||||
'pubkey': 'String',
|
'pubkey': 'String',
|
||||||
'short_channel_id': 'String',
|
'short_channel_id': 'String',
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
"msatoshi": {
|
"msatoshi": {
|
||||||
"type": "msat",
|
"type": "msat|any",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"type": "pubkey"
|
"type": "pubkey"
|
||||||
},
|
},
|
||||||
"satoshi": {
|
"satoshi": {
|
||||||
"type": "msat"
|
"type": "msat|all"
|
||||||
},
|
},
|
||||||
"feerate": {
|
"feerate": {
|
||||||
"type": "feerate"
|
"type": "feerate"
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ from pyln.testing.utils import env, TEST_NETWORK, wait_for
|
|||||||
from ephemeral_port_reserve import reserve
|
from ephemeral_port_reserve import reserve
|
||||||
import grpc
|
import grpc
|
||||||
import node_pb2 as nodepb
|
import node_pb2 as nodepb
|
||||||
|
from primitives_pb2 import AmountOrAny
|
||||||
import pytest
|
import pytest
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
@@ -101,6 +102,15 @@ def test_grpc_connect(node_factory):
|
|||||||
response = stub.ListFunds(nodepb.ListfundsRequest())
|
response = stub.ListFunds(nodepb.ListfundsRequest())
|
||||||
print(response)
|
print(response)
|
||||||
|
|
||||||
|
inv = stub.Invoice(nodepb.InvoiceRequest(
|
||||||
|
msatoshi=AmountOrAny(any=True),
|
||||||
|
description="hello",
|
||||||
|
label="lbl1",
|
||||||
|
preimage=b"\x00" * 32,
|
||||||
|
cltv=24
|
||||||
|
))
|
||||||
|
print(inv)
|
||||||
|
|
||||||
|
|
||||||
def test_grpc_generate_certificate(node_factory):
|
def test_grpc_generate_certificate(node_factory):
|
||||||
"""Test whether we correctly generate the certificates.
|
"""Test whether we correctly generate the certificates.
|
||||||
|
|||||||
Reference in New Issue
Block a user