split bank ad socket server up
This commit is contained in:
parent
3d9c98eeca
commit
c69654a924
22 changed files with 342 additions and 43 deletions
88
socket-server/src/protocol.rs
Normal file
88
socket-server/src/protocol.rs
Normal file
|
@ -0,0 +1,88 @@
|
|||
use anyhow::Result;
|
||||
|
||||
use bank::account::{Account, AccountError};
|
||||
|
||||
use crate::commands::error_to_code;
|
||||
|
||||
pub const START: [u8; 2] = [0xde, 0xad];
|
||||
pub const PONG: u8 = 0b0010_0000;
|
||||
|
||||
fn to_error_code(error: anyhow::Error, default: u8) -> u8 {
|
||||
match error.root_cause().downcast_ref::<AccountError>() {
|
||||
Some(e) => error_to_code(e),
|
||||
None => default,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn account_nr(nr: &str) -> Vec<u8> {
|
||||
let mut response = vec![PONG];
|
||||
response.append(&mut nr.as_bytes().to_vec());
|
||||
debug!("account number bytes: {:?}", response);
|
||||
response
|
||||
}
|
||||
|
||||
pub fn account_passivate(was_passivated: bool) -> Vec<u8> {
|
||||
let is_active_byte: u8 = if was_passivated { 1 } else { 0 };
|
||||
vec![PONG | is_active_byte]
|
||||
}
|
||||
|
||||
pub fn deposit(result: Result<()>) -> Vec<u8> {
|
||||
match result {
|
||||
Err(e) => error(to_error_code(e, 10)).to_vec(),
|
||||
Ok(_) => vec![PONG]
|
||||
}
|
||||
}
|
||||
|
||||
pub fn withdraw(result: Result<()>) -> Vec<u8> {
|
||||
match result {
|
||||
Err(e) => error(to_error_code(e, 10)).to_vec(),
|
||||
Ok(_) => vec![PONG]
|
||||
}
|
||||
}
|
||||
|
||||
pub fn account_nrs(nrs: &[String]) -> Vec<u8> {
|
||||
let mut response = vec![PONG];
|
||||
|
||||
nrs.iter().for_each(|key| {
|
||||
let key_bytes = key.as_bytes();
|
||||
debug!("account number bytes: {:?}", key_bytes);
|
||||
|
||||
response.push(key_bytes.len() as u8);
|
||||
response.append(&mut key_bytes.to_vec());
|
||||
});
|
||||
|
||||
debug!("account numbers bytes: {:?}", response);
|
||||
|
||||
response
|
||||
}
|
||||
|
||||
pub fn account(account: &Account) -> Vec<u8> {
|
||||
let is_active_byte: u8 = if account.is_active { 1 } else { 0 };
|
||||
|
||||
let mut response = vec![PONG | is_active_byte];
|
||||
|
||||
let nr_bytes = account.number.as_bytes();
|
||||
let mut nr_bytes_sized = vec![nr_bytes.len() as u8];
|
||||
nr_bytes_sized.append(&mut nr_bytes.to_vec());
|
||||
debug!("nr bytes: {:?}", nr_bytes_sized);
|
||||
|
||||
let owner_bytes = account.owner.as_bytes();
|
||||
let mut owner_bytes_sized = vec![owner_bytes.len() as u8];
|
||||
owner_bytes_sized.append(&mut owner_bytes.to_vec());
|
||||
debug!("owner bytes: {:?}", owner_bytes_sized);
|
||||
|
||||
let balance: [u8; 8] = account.balance.to_be_bytes();
|
||||
debug!("balance bytes: {:?}", balance);
|
||||
|
||||
response.append(&mut nr_bytes_sized);
|
||||
response.append(&mut owner_bytes_sized);
|
||||
response.append(&mut balance.to_vec());
|
||||
|
||||
debug!("account response: {:?}", response);
|
||||
|
||||
response
|
||||
}
|
||||
|
||||
pub fn error(code: u8) -> [u8; 1] {
|
||||
[0b0100_0000 | code]
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue