vesys-bank-server/socket-server/src/commands/get_account.rs

39 lines
858 B
Rust

use std::io::Write;
use std::net::TcpStream;
use std::sync::{Arc, RwLock};
use anyhow::Result;
use bank::bank::Bank;
use crate::commands::Command;
use crate::protocol;
pub struct GetAccount;
impl Command for GetAccount {
fn execute(
&self,
bank: Arc<RwLock<Bank>>,
data: &[u8],
mut stream: &TcpStream,
) -> Result<usize> {
debug!("account nr bytes {:?}", data);
let nr = String::from_utf8_lossy(data).to_string();
info!("getting account {:?}...", nr);
let bank = bank.read().unwrap();
let written = match bank.accounts.get(&nr) {
Some(acc) => {
let acc = acc.read().unwrap();
stream.write(&protocol::account(&acc))?
}
None => stream.write(&protocol::error(2))?,
};
Ok(written)
}
}