diff --git a/src/ctx.rs b/src/ctx.rs index 34a21bf..0be30e7 100644 --- a/src/ctx.rs +++ b/src/ctx.rs @@ -18,7 +18,7 @@ use rand::{Rng, distr::Alphanumeric}; use crate::{ Args, - util::{format_message, sanitize_text}, + util::{format_message, read_string, read_u32, sanitize_text}, }; fn load_accounts(accounts_file: Option) -> Vec { @@ -214,24 +214,11 @@ impl Account { pub fn from_bytes(text: Vec) -> Result> { let mut cursor = Cursor::new(text); - - let read_u32 = |cursor: &mut Cursor>| -> Result> { - let mut buf = [0; 4]; - cursor.read_exact(&mut buf)?; - Ok(u32::from_le_bytes(buf)) - }; - + let name_len = read_u32(&mut cursor)? as usize; let salt_len = read_u32(&mut cursor)? as usize; let addr_len = read_u32(&mut cursor)? as usize; let pass_len = read_u32(&mut cursor)? as usize; - - let read_string = |cursor: &mut Cursor>, len: usize| -> Result> { - let mut buf = vec![0; len]; - cursor.read_exact(&mut buf)?; - String::from_utf8(buf).map_err(|e| e.into()) - }; - let name = read_string(&mut cursor, name_len)?; let salt = read_string(&mut cursor, salt_len)?; let addr = read_string(&mut cursor, addr_len)?; diff --git a/src/util.rs b/src/util.rs index 38288ad..e1a93e3 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,3 +1,5 @@ +use std::{error::Error, io::Read}; + use colored::{Color, Colorize}; use lazy_static::lazy_static; use regex::Regex; @@ -94,3 +96,21 @@ pub fn find_username_color(message: &str) -> Option<(String, String, Color)> { } None } + +pub fn read_u32(cursor: &mut R) -> Result> +where + R: Read, +{ + let mut buf = [0; 4]; + cursor.read_exact(&mut buf)?; + Ok(u32::from_le_bytes(buf)) +} + +pub fn read_string(cursor: &mut R, len: usize) -> Result> +where + R: Read, +{ + let mut buf = vec![0; len]; + cursor.read_exact(&mut buf)?; + String::from_utf8(buf).map_err(|e| e.into()) +}