use std::collections::HashMap;
use serde::{Deserialize, Serialize};
pub type Base64String = String;
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
pub enum InvoiceState {
OPEN = 0,
SETTLED = 1,
CANCELED = 2,
ACCEPTED = 3,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
#[allow(nonstandard_style)]
pub enum PaymentStatus {
UNKNOWN = 0,
IN_FLIGHT = 1,
SUCCEEDED = 2,
FAILED = 3,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
#[allow(nonstandard_style)]
pub enum PaymentFailureReason {
FAILURE_REASON_NONE = 0,
FAILURE_REASON_TIMEOUT = 1,
FAILURE_REASON_NO_ROUTE = 2,
FAILURE_REASON_ERROR = 3,
FAILURE_REASON_INCORRECT_PAYMENT_DETAILS = 4,
FAILURE_REASON_INSUFFICIENT_BALANCE = 5,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
#[allow(nonstandard_style)]
pub enum HTLCStatus {
IN_FLIGHT = 0,
SUCCEEDED = 1,
FAILED = 2,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
#[allow(nonstandard_style)]
pub enum FailureCode {
RESERVED = 0,
INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS = 1,
INCORRECT_PAYMENT_AMOUNT = 2,
FINAL_INCORRECT_CLTV_EXPIRY = 3,
FINAL_INCORRECT_HTLC_AMOUNT = 4,
FINAL_EXPIRY_TOO_SOON = 5,
INVALID_REALM = 6,
EXPIRY_TOO_SOON = 7,
INVALID_ONION_VERSION = 8,
INVALID_ONION_HMAC = 9,
INVALID_ONION_KEY = 10,
AMOUNT_BELOW_MINIMUM = 11,
FEE_INSUFFICIENT = 12,
INCORRECT_CLTV_EXPIRY = 13,
CHANNEL_DISABLED = 14,
TEMPORARY_CHANNEL_FAILURE = 15,
REQUIRED_NODE_FEATURE_MISSING = 16,
REQUIRED_CHANNEL_FEATURE_MISSING = 17,
UNKNOWN_NEXT_PEER = 18,
TEMPORARY_NODE_FAILURE = 19,
PERMANENT_NODE_FAILURE = 20,
PERMANENT_CHANNEL_FAILURE = 21,
EXPIRY_TOO_FAR = 22,
MPP_TIMEOUT = 23,
INVALID_ONION_PAYLOAD = 24,
INTERNAL_FAILURE = 997,
UNKNOWN_FAILURE = 998,
UNREADABLE_FAILURE = 999,
}
#[derive(Debug, Default, Serialize)]
pub struct AddInvoiceRequest {
pub memo: Option<String>,
pub r_preimage: Option<String>,
pub value_msat: u64,
pub description_hash: Option<String>,
pub expiry: i32,
pub fallback_addr: Option<String>,
pub cltv_expiry: Option<i32>,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
pub struct AddInvoiceResponse {
pub r_hash: Base64String,
pub payment_request: String,
pub add_index: String,
pub payment_addr: Base64String,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
pub struct LookupInvoiceResponse {
pub memo: String,
pub r_preimage: Base64String,
pub r_hash: Base64String,
pub value: String,
pub value_msat: String,
pub settled: bool,
pub settle_date: String,
pub creation_date: String,
pub payment_request: String,
pub expiry: String,
pub state: InvoiceState,
}
#[derive(Debug, Serialize, Eq, PartialEq, Clone)]
pub struct FeeLimit {
pub fixed: Option<String>,
pub fixed_msat: Option<String>,
pub percent: Option<String>,
}
#[derive(Debug, Default, Serialize)]
pub struct SendPaymentSyncRequest {
pub dest: Option<Base64String>,
pub amt: Option<String>,
pub amt_msat: Option<String>,
pub payment_hash: Option<Base64String>,
pub payment_request: String,
pub final_cltv_delta: Option<i32>,
pub fee_limit: Option<FeeLimit>,
pub outgoing_chan_id: Option<String>,
pub last_hop_pubkey: Option<Base64String>,
pub cltv_limit: Option<i64>,
pub allow_self_payment: Option<bool>,
pub dest_features: Option<Vec<u8>>,
pub payment_addr: Option<Base64String>,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
pub struct MppRecord {
pub payment_addr: Base64String,
pub total_amt_msat: String,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
pub struct AmpRecord {
pub root_share: Base64String,
pub set_id: Base64String,
pub child_index: i64,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
pub struct Hop {
pub chan_id: String,
pub chan_capacity: String,
pub amt_to_forward: String,
pub fee: String,
pub expiry: i64,
pub amt_to_forward_msat: String,
pub fee_msat: String,
pub pub_key: Option<String>,
pub tlv_payload: bool,
pub mpp_record: Option<MppRecord>,
pub amp_record: Option<AmpRecord>,
pub custom_records: HashMap<String, String>,
pub metadata: Base64String,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
pub struct Route {
pub total_time_lock: i64,
pub total_amt: String,
pub total_amt_msat: String,
pub total_fees: String,
pub total_fees_msat: String,
pub hops: Vec<Hop>,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
pub struct SendPaymentSyncResponse {
pub payment_error: String,
pub payment_preimage: Base64String,
pub payment_route: Option<Route>,
pub payment_hash: Base64String,
}
#[derive(Debug, Default, Serialize)]
pub struct ListPaymentsRequest {
pub include_incomplete: bool,
pub index_offset: u64,
pub max_payments: u64,
pub reversed: bool,
pub count_total_payments: bool,
pub creation_date_start: u64,
pub creation_date_end: u64,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
pub struct ChannelUpdate {
pub signature: String,
pub chain_hash: String,
pub chan_id: String,
pub timestamp: u32,
pub message_flags: u32,
pub channel_flags: u32,
pub time_lock_delta: u32,
pub htlc_minimum_msat: String,
pub base_fee: u32,
pub fee_rate: u32,
pub htlc_maximum_msat: String,
pub extra_opaque_data: String,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
pub struct Failure {
pub code: FailureCode,
pub channel_update: Option<ChannelUpdate>,
pub htlc_msat: String,
pub onion_sha_256: String,
pub cltv_expiry: u32,
pub flags: u32,
pub failure_source_index: u32,
pub height: u32,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
pub struct HTLCAttempt {
pub attempt_id: String,
pub status: HTLCStatus,
pub route: Route,
pub attempt_time_ns: String,
pub resolve_time_ns: String,
pub failure: Option<Failure>,
pub preimage: String,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
pub struct Payment {
pub payment_hash: Base64String,
pub payment_preimage: Base64String,
pub payment_request: String,
pub status: PaymentStatus,
pub fee_sat: String,
pub fee_msat: String,
pub value_sat: String,
pub value_msat: String,
pub creation_time_ns: String,
pub htlcs: Vec<HTLCAttempt>,
pub payment_index: String,
pub failure_reason: PaymentFailureReason,
}
#[derive(Debug, Deserialize, Eq, PartialEq, Clone)]
pub struct ListPaymentsResponse {
pub payments: Vec<Payment>,
pub first_index_offset: String,
pub last_index_offset: String,
pub total_num_payments: String,
}