34 lines
768 B
Rust
34 lines
768 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 CreateAccount;
|
|
|
|
impl Command for CreateAccount {
|
|
fn execute(
|
|
&self,
|
|
bank: Arc<RwLock<Bank>>,
|
|
data: &[u8],
|
|
mut stream: &TcpStream,
|
|
) -> Result<usize> {
|
|
debug!("owner nr bytes {:?}", data);
|
|
|
|
let owner = String::from_utf8_lossy(data);
|
|
info!("creating new account with owner {}...", owner);
|
|
|
|
let mut bank = bank.write().unwrap();
|
|
let nr = bank.create_account(owner.into());
|
|
info!("created account {}", nr);
|
|
|
|
let written = stream.write(&protocol::account_nr(&nr))?;
|
|
Ok(written)
|
|
}
|
|
}
|