use derive_getters::Getters;
use serde::{Deserialize, Serialize};
use crate::models::{
prelude::{Embedded, Link, ResponseLinks, TemplateLink},
Response,
};
#[derive(Default, Debug, Clone, Serialize, Deserialize, Getters)]
#[serde(rename_all = "camelCase")]
pub struct AllLiquidityPoolsResponse {
#[serde(rename = "_links")]
pub links: ResponseLinks,
#[serde(rename = "_embedded")]
pub embedded: Embedded<LiquidityPool>,
}
#[derive(Default, Debug, Clone, Serialize, Deserialize, Getters)]
#[serde(rename_all = "camelCase")]
pub struct LiquidityPool {
#[serde(rename = "_links")]
pub links: RecordLink,
pub id: String,
#[serde(rename = "paging_token")]
pub paging_token: String,
#[serde(rename = "fee_bp")]
pub fee_bp: i64,
#[serde(rename = "type")]
pub type_field: String,
#[serde(rename = "total_trustlines")]
pub total_trustlines: String,
#[serde(rename = "total_shares")]
pub total_shares: String,
pub reserves: Vec<Reserve>,
#[serde(rename = "last_modified_ledger")]
pub last_modified_ledger: i64,
#[serde(rename = "last_modified_time")]
pub last_modified_time: String,
}
#[derive(Default, Debug, Clone, Serialize, Deserialize, Getters)]
#[serde(rename_all = "camelCase")]
pub struct Reserve {
pub asset: String,
pub amount: String,
}
#[derive(Default, Debug, Clone, Serialize, Deserialize, Getters)]
#[serde(rename_all = "camelCase")]
pub struct RecordLink {
#[serde(rename = "self")]
pub self_field: Option<Link>,
pub transactions: TemplateLink,
pub operations: TemplateLink,
}
impl Response for AllLiquidityPoolsResponse {
fn from_json(json: String) -> Result<Self, String> {
serde_json::from_str(&json).map_err(|e| e.to_string())
}
}
impl Response for LiquidityPool {
fn from_json(json: String) -> Result<Self, String> {
let ledger_record = serde_json::from_str(&json).map_err(|e| e.to_string())?;
Ok(ledger_record)
}
}