git.delta.rocks / jrsonnet / refs/commits / aeb19ed23fd5

difftreelog

source

cmds/fleet/src/fleetdata.rs1.7 KiBsourcehistory
1use chrono::{DateTime, Utc};2use serde::{Deserialize, Deserializer, Serialize, Serializer};3use std::collections::BTreeMap;45#[derive(Serialize, Deserialize, Default)]6#[serde(rename_all = "camelCase")]7pub struct HostData {8	#[serde(default)]9	#[serde(skip_serializing_if = "String::is_empty")]10	pub encryption_key: String,11}1213#[derive(Serialize, Deserialize)]14#[serde(rename_all = "camelCase")]15pub struct FleetData {16	#[serde(default)]17	pub hosts: BTreeMap<String, HostData>,18	#[serde(default)]19	#[serde(skip_serializing_if = "BTreeMap::is_empty")]20	pub shared_secrets: BTreeMap<String, FleetSharedSecret>,21	#[serde(default)]22	#[serde(skip_serializing_if = "BTreeMap::is_empty")]23	pub host_secrets: BTreeMap<String, BTreeMap<String, FleetSecret>>,24}2526#[derive(Serialize, Deserialize)]27#[serde(rename_all = "camelCase")]28pub struct FleetSharedSecret {29	pub owners: Vec<String>,30	#[serde(flatten)]31	pub secret: FleetSecret,32}3334#[derive(Serialize, Deserialize)]35#[serde(rename_all = "camelCase")]36pub struct FleetSecret {37	#[serde(default)]38	#[serde(skip_serializing_if = "Option::is_none")]39	pub expire_at: Option<DateTime<Utc>>,40	#[serde(skip_serializing_if = "Option::is_none")]41	pub public: Option<String>,42	#[serde(43		default,44		skip_serializing_if = "Vec::is_empty",45		serialize_with = "as_z85",46		deserialize_with = "from_z85"47	)]48	pub secret: Vec<u8>,49}5051fn as_z85<S>(key: &[u8], serializer: S) -> Result<S::Ok, S::Error>52where53	S: Serializer,54{55	serializer.serialize_str(&z85::encode(&key))56}5758fn from_z85<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>59where60	D: Deserializer<'de>,61{62	use serde::de::Error;63	String::deserialize(deserializer)64		.and_then(|string| z85::decode(&string).map_err(|err| Error::custom(err.to_string())))65}