use crate::invoice::Currency;
use crate::schema_helpers::*;
use crate::serde_utils::{Hash256, U128Hex, U64Hex};
use ckb_jsonrpc_types::Script;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use serde_with::serde_as;
#[derive(Debug, Copy, Clone, Serialize, Deserialize, Eq, PartialEq, JsonSchema)]
pub enum CchOrderStatus {
Pending,
IncomingAccepted,
OutgoingInFlight,
OutgoingSuccess,
Success,
Failed,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub enum CchInvoice {
Fiber(String),
Lightning(String),
}
#[derive(Serialize, Deserialize, JsonSchema)]
pub struct SendBTCParams {
pub btc_pay_req: String,
pub currency: Currency,
}
#[serde_as]
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct CchOrderResponse {
#[serde_as(as = "U64Hex")]
#[schemars(schema_with = "schema_as_uint_hex")]
pub timestamp: u64,
#[serde_as(as = "U64Hex")]
#[schemars(schema_with = "schema_as_uint_hex")]
pub expiry_delta_seconds: u64,
pub wrapped_btc_type_script: Script,
pub incoming_invoice: CchInvoice,
pub outgoing_pay_req: String,
pub payment_hash: Hash256,
#[serde_as(as = "U128Hex")]
#[schemars(schema_with = "schema_as_uint_hex")]
pub amount_sats: u128,
#[serde_as(as = "U128Hex")]
#[schemars(schema_with = "schema_as_uint_hex")]
pub fee_sats: u128,
pub status: CchOrderStatus,
}
#[serde_as]
#[derive(Serialize, Deserialize, JsonSchema)]
pub struct ReceiveBTCParams {
pub fiber_pay_req: String,
}
#[derive(Serialize, Deserialize, JsonSchema)]
pub struct GetCchOrderParams {
pub payment_hash: Hash256,
}