1use base64::prelude::*;
9use r402::proto::helpers::{PaymentPayloadEnum, PaymentRequiredEnum};
10use r402::{PaymentPayload, PaymentPayloadV1, PaymentRequired, PaymentRequiredV1, SettleResponse};
11
12use crate::error::HttpError;
13
14pub fn encode_payment_signature(payload: &PaymentPayload) -> Result<String, HttpError> {
21 let json = serde_json::to_vec(payload)?;
22 Ok(BASE64_STANDARD.encode(&json))
23}
24
25pub fn encode_x_payment(payload: &PaymentPayloadV1) -> Result<String, HttpError> {
32 let json = serde_json::to_vec(payload)?;
33 Ok(BASE64_STANDARD.encode(&json))
34}
35
36pub fn decode_payment_payload(header_value: &str) -> Result<PaymentPayloadEnum, HttpError> {
45 let bytes = BASE64_STANDARD.decode(header_value.trim())?;
46 let value: serde_json::Value = serde_json::from_slice(&bytes)?;
47 r402::proto::helpers::parse_payment_payload(&value).map_err(HttpError::Protocol)
48}
49
50pub fn encode_payment_required(required: &PaymentRequired) -> Result<String, HttpError> {
57 let json = serde_json::to_vec(required)?;
58 Ok(BASE64_STANDARD.encode(&json))
59}
60
61pub fn encode_payment_required_v1(required: &PaymentRequiredV1) -> Result<String, HttpError> {
68 let json = serde_json::to_vec(required)?;
69 Ok(BASE64_STANDARD.encode(&json))
70}
71
72pub fn decode_payment_required(header_value: &str) -> Result<PaymentRequiredEnum, HttpError> {
78 let bytes = BASE64_STANDARD.decode(header_value.trim())?;
79 let value: serde_json::Value = serde_json::from_slice(&bytes)?;
80 r402::proto::helpers::parse_payment_required(&value).map_err(HttpError::Protocol)
81}
82
83pub fn encode_payment_response(response: &SettleResponse) -> Result<String, HttpError> {
90 let json = serde_json::to_vec(response)?;
91 Ok(BASE64_STANDARD.encode(&json))
92}
93
94pub fn decode_payment_response(header_value: &str) -> Result<SettleResponse, HttpError> {
100 let bytes = BASE64_STANDARD.decode(header_value.trim())?;
101 Ok(serde_json::from_slice(&bytes)?)
102}