diff --git a/chaos-tproxy-proxy/src/raw_config.rs b/chaos-tproxy-proxy/src/raw_config.rs index c090cbe..c1b5196 100644 --- a/chaos-tproxy-proxy/src/raw_config.rs +++ b/chaos-tproxy-proxy/src/raw_config.rs @@ -43,8 +43,24 @@ pub enum Role { #[serde(tag = "type", content = "value")] pub enum RawFile { Path(PathBuf), + #[serde(with="contents_base64")] Contents(Vec), } +mod contents_base64 { + use serde::{Serialize, Deserialize}; + use serde::{Deserializer, Serializer}; + + pub fn serialize(v: &Vec, s: S) -> Result { + let base64 = base64::encode(v); + String::serialize(&base64, s) + } + + pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result, D::Error> { + let base64 = String::deserialize(d)?; + base64::decode(base64.as_bytes()) + .map_err(|e| serde::de::Error::custom(e)) + } +} #[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize, Default)] pub struct TLSRawConfig {