use rmcp::schemars;
#[derive(serde::Deserialize, schemars::JsonSchema)]
pub struct BondRateParams {
pub start_date: String,
}
#[derive(serde::Deserialize, schemars::JsonSchema)]
pub struct BondLimitParams {
#[serde(default = "default_limit")]
pub limit: usize,
}
#[derive(serde::Deserialize, schemars::JsonSchema)]
pub struct BondYieldParams {
pub start_date: String,
pub end_date: String,
}
const fn default_limit() -> usize {
100
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_bond_rate_params() {
let json = r#"{"start_date": "20200101"}"#;
let params: BondRateParams = serde_json::from_str(json).unwrap();
assert_eq!(params.start_date, "20200101");
}
#[test]
fn test_bond_limit_params() {
let json = r"{}";
let params: BondLimitParams = serde_json::from_str(json).unwrap();
assert_eq!(params.limit, 100);
}
#[test]
fn test_bond_limit_params_custom() {
let json = r#"{"limit": 50}"#;
let params: BondLimitParams = serde_json::from_str(json).unwrap();
assert_eq!(params.limit, 50);
}
#[test]
fn test_bond_yield_params() {
let json = r#"{"start_date": "20200101", "end_date": "20240101"}"#;
let params: BondYieldParams = serde_json::from_str(json).unwrap();
assert_eq!(params.start_date, "20200101");
assert_eq!(params.end_date, "20240101");
}
}