From c34bdd06db22b0b8daf74d8a61255cbb5d990131 Mon Sep 17 00:00:00 2001 From: Liu Jiang Date: Fri, 22 Nov 2019 14:52:26 +0800 Subject: [PATCH] agent: simplify implementation of oci/serialize Simplify implementation of oci/serialize: 1) explicitly export pub members. 2) avoid unnecessary & and mut operators. 3) define Result to avoid duplicated code. Signed-off-by: Liu Jiang --- src/agent/oci/src/lib.rs | 7 ++++--- src/agent/oci/src/serialize.rs | 27 ++++++++++++++------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/agent/oci/src/lib.rs b/src/agent/oci/src/lib.rs index b74ca5820f..e62bd7f72b 100644 --- a/src/agent/oci/src/lib.rs +++ b/src/agent/oci/src/lib.rs @@ -11,7 +11,8 @@ extern crate serde_json; use libc::mode_t; use std::collections::HashMap; -pub mod serialize; +mod serialize; +pub use serialize::{to_string, to_writer, Result, SerializeError}; #[allow(dead_code)] fn is_false(b: bool) -> bool { @@ -57,11 +58,11 @@ pub struct Spec { } impl Spec { - pub fn load(path: &str) -> Result { + pub fn load(path: &str) -> Result { serialize::deserialize(path) } - pub fn save(&self, path: &str) -> Result<(), serialize::SerializeError> { + pub fn save(&self, path: &str) -> Result<()> { serialize::serialize(self, path) } } diff --git a/src/agent/oci/src/serialize.rs b/src/agent/oci/src/serialize.rs index 2ef52e1f2e..012743b9fe 100644 --- a/src/agent/oci/src/serialize.rs +++ b/src/agent/oci/src/serialize.rs @@ -3,23 +3,24 @@ // SPDX-License-Identifier: Apache-2.0 // -use serde; use serde::{Deserialize, Serialize}; use serde_json; use std::error::Error; -use std::fmt::{self, Formatter}; +use std::fmt::{Display, Formatter, Result as FmtResult}; use std::fs::File; use std::io; +pub type Result = std::result::Result; + #[derive(Debug)] pub enum SerializeError { Io(io::Error), Json(serde_json::Error), } -impl fmt::Display for SerializeError { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { +impl Display for SerializeError { + fn fmt(&self, f: &mut Formatter) -> FmtResult { match *self { SerializeError::Io(ref e) => e.fmt(f), SerializeError::Json(ref e) => e.fmt(f), @@ -55,33 +56,33 @@ impl From for SerializeError { } } -pub fn to_writer(o: &T, mut w: W) -> Result<(), SerializeError> +pub fn to_writer(o: &T, w: W) -> Result<()> where W: io::Write, T: Serialize, { - Ok(serde_json::to_writer(&mut w, &o)?) + Ok(serde_json::to_writer(w, o)?) } -pub fn serialize(o: &T, path: &str) -> Result<(), SerializeError> +pub fn serialize(o: &T, path: &str) -> Result<()> where T: Serialize, { - let mut f = File::create(path)?; - Ok(serde_json::to_writer(&mut f, &o)?) + let f = File::create(path)?; + Ok(serde_json::to_writer(f, o)?) } -pub fn to_string(o: &T) -> Result +pub fn to_string(o: &T) -> Result where T: Serialize, { - Ok(serde_json::to_string(&o)?) + Ok(serde_json::to_string(o)?) } -pub fn deserialize(path: &str) -> Result +pub fn deserialize(path: &str) -> Result where for<'a> T: Deserialize<'a>, { let f = File::open(path)?; - Ok(serde_json::from_reader(&f)?) + Ok(serde_json::from_reader(f)?) }