pub use r402_core::scheme::ExactScheme;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct NearExtra {}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ExactNearPayload {
pub signed_delegate_action: String,
}
pub mod v2 {
use r402_core::wire;
use super::{ExactNearPayload, ExactScheme, NearExtra};
use crate::chain::{NearAddress, NearTokenAmount};
pub type PaymentPayload = wire::PaymentPayload<PaymentRequirements, ExactNearPayload>;
pub type PaymentRequirements =
wire::PaymentRequirements<ExactScheme, NearTokenAmount, NearAddress, NearExtra>;
}
#[cfg(test)]
#[allow(clippy::unwrap_used, reason = "test assertions")]
mod tests {
use serde_json::Value;
use super::*;
#[test]
fn payload_field_is_camel_case() {
let payload = ExactNearPayload {
signed_delegate_action: "AQID".to_owned(),
};
let json = serde_json::to_value(&payload).unwrap();
assert_eq!(
json.get("signedDelegateAction").and_then(Value::as_str),
Some("AQID")
);
let back: ExactNearPayload = serde_json::from_value(json).unwrap();
assert_eq!(back.signed_delegate_action, "AQID");
}
#[test]
fn extra_rejects_unknown_fields() {
let json = serde_json::json!({ "feePayer": "relayer.testnet" });
assert!(serde_json::from_value::<NearExtra>(json).is_err());
let empty = serde_json::json!({});
assert!(serde_json::from_value::<NearExtra>(empty).is_ok());
}
}