use crate::{Context, Handler}; use axum::{extract::State, http::StatusCode, Json}; use serde::Deserialize; use verax::{AccountId, AnyAmount, Status, Tag}; #[derive(Deserialize)] pub struct Deposit { pub account: AccountId, #[serde(flatten)] pub amount: AnyAmount, pub memo: String, pub tags: Vec, pub status: Status, } #[async_trait::async_trait] impl Handler for Deposit { type Ok = verax::Transaction; type Err = verax::Error; async fn handle(self, ctx: &Context) -> Result { ctx.ledger .deposit( &self.account, self.amount.try_into()?, self.status, self.tags, self.memo, ) .await } } pub async fn handler( State(ledger): State, Json(item): Json, ) -> Result, (StatusCode, String)> { Ok(Json(item.handle(&ledger).await.map_err(|err| { (StatusCode::BAD_REQUEST, err.to_string()) })?)) }