mirror of
https://github.com/kata-containers/cgroups-rs.git
synced 2026-08-05 02:13:23 +00:00
optimize and refactor: read_to_string and read_i[u]64_from
There's so many Duplicated read_string_from method in different subsystem's implementation, so as read_u64_from/read_i64_from methods. (1) Move the read_string_from method into `lib.rs`, called by each subsystem implementation as needed. (2) Refactor read_u[i]64_from method with the help Rust Generic f unction `read_from` and wrapped by read_u64_from or read_i64_from. fix: #20 Signed-off-by: LiYa'nan <oliverliyn@gmail.com>
This commit is contained in:
+25
-3
@@ -10,6 +10,7 @@ use std::collections::HashMap;
|
||||
use std::fs::{self, File};
|
||||
use std::io::{BufRead, BufReader, Read, Write};
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::str::FromStr;
|
||||
|
||||
macro_rules! update_and_test {
|
||||
($self: ident, $set_func:ident, $value:expr, $get_func:ident) => {
|
||||
@@ -832,14 +833,35 @@ pub fn nested_keyed_to_hashmap(mut file: File) -> Result<HashMap<String, HashMap
|
||||
Ok(h)
|
||||
}
|
||||
|
||||
/// read and parse an i64 data
|
||||
fn read_i64_from(mut file: File) -> Result<i64> {
|
||||
fn read_from<T>(mut file: File) -> Result<T>
|
||||
where
|
||||
T: FromStr,
|
||||
<T as FromStr>::Err: 'static + Send + Sync + std::error::Error,
|
||||
{
|
||||
let mut string = String::new();
|
||||
match file.read_to_string(&mut string) {
|
||||
Ok(_) => string
|
||||
.trim()
|
||||
.parse()
|
||||
.parse::<T>()
|
||||
.map_err(|e| Error::with_cause(ParseError, e)),
|
||||
Err(e) => Err(Error::with_cause(ReadFailed, e)),
|
||||
}
|
||||
}
|
||||
|
||||
fn read_string_from(mut file: File) -> Result<String> {
|
||||
let mut string = String::new();
|
||||
match file.read_to_string(&mut string) {
|
||||
Ok(_) => Ok(string.trim().to_string()),
|
||||
Err(e) => Err(Error::with_cause(ReadFailed, e)),
|
||||
}
|
||||
}
|
||||
|
||||
/// read and parse an u64 data
|
||||
fn read_u64_from(file: File) -> Result<u64> {
|
||||
read_from::<u64>(file)
|
||||
}
|
||||
|
||||
/// read and parse an i64 data
|
||||
fn read_i64_from(file: File) -> Result<i64> {
|
||||
read_from::<i64>(file)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user