Skip to content

Commit 15964ea

Browse files
committed
Add Api impl for ListForwardedPayments.
1 parent 3b788c2 commit 15964ea

File tree

4 files changed

+59
-5
lines changed

4 files changed

+59
-5
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
use crate::io::{
2+
FORWARDED_PAYMENTS_PERSISTENCE_PRIMARY_NAMESPACE,
3+
FORWARDED_PAYMENTS_PERSISTENCE_SECONDARY_NAMESPACE,
4+
};
5+
use crate::service::Context;
6+
use bytes::Bytes;
7+
use ldk_server_protos::api::{ListForwardedPaymentsRequest, ListForwardedPaymentsResponse};
8+
use ldk_server_protos::types::{ForwardedPayment, PageToken};
9+
use prost::Message;
10+
use std::sync::Arc;
11+
12+
pub(crate) const LIST_FORWARDED_PAYMENTS_PATH: &str = "ListForwardedPayments";
13+
14+
pub(crate) fn handle_list_forwarded_payments_request(
15+
context: Arc<Context>, request: ListForwardedPaymentsRequest,
16+
) -> Result<ListForwardedPaymentsResponse, ldk_node::NodeError> {
17+
let page_token = request.page_token.map(|p| (p.token, p.index));
18+
let list_response = context
19+
.paginated_kv_store
20+
.list(
21+
FORWARDED_PAYMENTS_PERSISTENCE_PRIMARY_NAMESPACE,
22+
FORWARDED_PAYMENTS_PERSISTENCE_SECONDARY_NAMESPACE,
23+
page_token,
24+
)
25+
.map_err(|_| ldk_node::NodeError::ConnectionFailed)?;
26+
27+
let mut forwarded_payments: Vec<ForwardedPayment> = vec![];
28+
for key in list_response.keys {
29+
let forwarded_payment_bytes = context
30+
.paginated_kv_store
31+
.read(
32+
FORWARDED_PAYMENTS_PERSISTENCE_PRIMARY_NAMESPACE,
33+
FORWARDED_PAYMENTS_PERSISTENCE_SECONDARY_NAMESPACE,
34+
&key,
35+
)
36+
.map_err(|_| ldk_node::NodeError::ConnectionFailed)?;
37+
let forwarded_payment = ForwardedPayment::decode(Bytes::from(forwarded_payment_bytes))
38+
.map_err(|_| ldk_node::NodeError::ConnectionFailed)?;
39+
forwarded_payments.push(forwarded_payment);
40+
}
41+
let response = ListForwardedPaymentsResponse {
42+
forwarded_payments,
43+
next_page_token: list_response
44+
.next_page_token
45+
.map(|(token, index)| PageToken { token, index }),
46+
};
47+
Ok(response)
48+
}

ldk-server/src/api/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ pub(crate) mod get_balances;
88
pub(crate) mod get_node_info;
99
pub(crate) mod get_payment_details;
1010
pub(crate) mod list_channels;
11+
pub(crate) mod list_forwarded_payments;
1112
pub(crate) mod list_payments;
1213
pub(crate) mod onchain_receive;
1314
pub(crate) mod onchain_send;

ldk-server/src/main.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,9 @@ fn main() {
8686
},
8787
};
8888

89-
let paginated_store =
90-
SqliteStore::new(PathBuf::from(config_file.storage_dir_path), None, None).unwrap();
89+
let paginated_store = Arc::new(
90+
SqliteStore::new(PathBuf::from(config_file.storage_dir_path), None, None).unwrap(),
91+
);
9192

9293
println!("Starting up...");
9394
match node.start_with_runtime(Arc::clone(&runtime)) {
@@ -186,7 +187,7 @@ fn main() {
186187
match res {
187188
Ok((stream, _)) => {
188189
let io_stream = TokioIo::new(stream);
189-
let node_service = NodeService::new(Arc::clone(&node));
190+
let node_service = NodeService::new(Arc::clone(&node), Arc::clone(&paginated_store) as Arc<dyn PaginatedKVStore + Send + Sync>);
190191
runtime.spawn(async move {
191192
if let Err(err) = http1::Builder::new().serve_connection(io_stream, node_service).await {
192193
eprintln!("Failed to serve connection: {}", err);

ldk-server/src/service.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ use crate::api::open_channel::{handle_open_channel, OPEN_CHANNEL_PATH};
2525
use crate::api::update_channel_config::{
2626
handle_update_channel_config_request, UPDATE_CHANNEL_CONFIG_PATH,
2727
};
28+
use crate::io::paginated_kv_store::PaginatedKVStore;
2829
use std::future::Future;
2930
use std::pin::Pin;
3031
use std::sync::Arc;
@@ -35,13 +36,16 @@ pub struct NodeService {
3536
}
3637

3738
impl NodeService {
38-
pub(crate) fn new(node: Arc<Node>) -> Self {
39-
Self { context: Arc::new(Context { node }) }
39+
pub(crate) fn new(
40+
node: Arc<Node>, paginated_kv_store: Arc<dyn PaginatedKVStore + Send + Sync>,
41+
) -> Self {
42+
Self { context: Arc::new(Context { node, paginated_kv_store }) }
4043
}
4144
}
4245

4346
pub(crate) struct Context {
4447
pub(crate) node: Arc<Node>,
48+
pub(crate) paginated_kv_store: Arc<dyn PaginatedKVStore + Send + Sync>,
4549
}
4650

4751
impl Service<Request<Incoming>> for NodeService {

0 commit comments

Comments
 (0)