git.delta.rocks / jrsonnet / refs/commits / 34f0c725e4c0

difftreelog

style fix clippy warnings

vvxllnzmYaroslav Bolyukin2025-07-18parent: #a8825de.patch.diff
in: trunk

5 files changed

modifiedcrates/fleet-base/src/deploy.rsdiffbeforeafterboth
--- a/crates/fleet-base/src/deploy.rs
+++ b/crates/fleet-base/src/deploy.rs
@@ -235,17 +235,12 @@
 					error!("failed to disarm rollback run: {e}");
 				}
 			}
-		} else {
-			match host
-				.rm_file("/etc/fleet_rollback_marker", true)
-				.in_current_span()
-				.await
-			{
-				Err(_e) => {
-					// Marker might not exist, yet better try to remove it.
-				}
-				_ => {}
-			}
+		} else if let Err(_e) = host
+			.rm_file("/etc/fleet_rollback_marker", true)
+			.in_current_span()
+			.await
+		{
+			// Marker might not exist, yet better try to remove it.
 		}
 	}
 	Ok(())
modifiedcrates/fleet-base/src/host.rsdiffbeforeafterboth
--- a/crates/fleet-base/src/host.rs
+++ b/crates/fleet-base/src/host.rs
@@ -214,13 +214,11 @@
 	pub fn set_session_destination(&self, dest: String) {
 		self.session_destination
 			.set(dest)
-			.ok()
 			.expect("session destination is already set")
 	}
 	pub fn set_deploy_kind(&self, kind: DeployKind) {
 		self.deploy_kind
 			.set(kind)
-			.ok()
 			.expect("deploy kind is already set");
 	}
 	pub async fn deploy_kind(&self) -> Result<DeployKind> {
@@ -568,6 +566,7 @@
 			local: true,
 			session: OnceLock::new(),
 			deploy_kind: OnceCell::new(),
+			session_destination: OnceCell::new(),
 		}
 	}
 
@@ -588,6 +587,7 @@
 			local: self.localhost == name,
 			session: OnceLock::new(),
 			deploy_kind: OnceCell::new(),
+			session_destination: OnceCell::new(),
 		})
 	}
 	pub async fn list_hosts(&self) -> Result<Vec<ConfigHost>> {
modifiedcrates/fleet-shared/src/encoding.rsdiffbeforeafterboth
before · crates/fleet-shared/src/encoding.rs
1use std::{2	fmt::{self, Display},3	str::FromStr,4};56use base64::engine::{Engine, general_purpose::STANDARD_NO_PAD};7use serde::{Deserialize, Deserializer, Serialize, de::Error};8use unicode_categories::UnicodeCategories;910#[derive(Debug, PartialEq, Clone)]11pub struct SecretData {12	pub data: Vec<u8>,13	pub encrypted: bool,14}1516const BASE64_ENCODED_PREFIX: &str = "<BASE64-ENCODED>\n";17const Z85_ENCODED_PREFIX: &str = "<Z85-ENCODED>\n";18// Multiline text in Nix can only end with \n, which is not cool for actual single-line strings.19const PLAINTEXT_NEWLINE_PREFIX: &str = "<PLAINTEXT-NL>\n";20const PLAINTEXT_PREFIX: &str = "<PLAINTEXT>";2122const SECRET_PREFIX: &str = "<ENCRYPTED>";2324impl<'de> Deserialize<'de> for SecretData {25	fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>26	where27		D: Deserializer<'de>,28	{29		let string = String::deserialize(deserializer)?;30		string.parse().map_err(D::Error::custom)31	}32}3334impl Serialize for SecretData {35	fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>36	where37		S: serde::Serializer,38	{39		self.to_string().serialize(serializer)40	}41}4243impl FromStr for SecretData {44	type Err = String;4546	fn from_str(string: &str) -> Result<Self, Self::Err> {47		let (encrypted, string) = if let Some(unprefixed) = string.strip_prefix(SECRET_PREFIX) {48			(true, unprefixed)49		} else {50			(false, string)51		};52		let data = if let Some(unprefixed) = string.strip_prefix(BASE64_ENCODED_PREFIX) {53			STANDARD_NO_PAD54				.decode(unprefixed.replace(|v| matches!(v, '\n' | '\t' | ' '), ""))55				.map_err(|e| format!("base64-encoded failed: {e}"))?56		} else if let Some(unprefixed) = string.strip_prefix(Z85_ENCODED_PREFIX) {57			z85::decode(unprefixed.replace(|v| matches!(v, '\n' | '\t' | ' '), ""))58				.map_err(|e| format!("z85-encoded failed: {e}"))?59		} else if let Some(unprefixed) = string.strip_prefix(PLAINTEXT_NEWLINE_PREFIX) {60			unprefixed.as_bytes().to_owned()61		} else if let Some(unprefixed) = string.strip_prefix(PLAINTEXT_PREFIX) {62			unprefixed.as_bytes().to_owned()63		} else {64			let secret_prefix = format!("{SECRET_PREFIX}{Z85_ENCODED_PREFIX}");65			return Err(format!(66				"unknown secret encoding. If you're migrating from old version of fleet, prefix public secret fields with {PLAINTEXT_PREFIX:?}, and encrypted data with {secret_prefix:?}: {string}"67			));68		};69		Ok(Self { data, encrypted })70	}71}7273impl Display for SecretData {74	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {75		let mut readable = std::str::from_utf8(&self.data).ok();76		if self.encrypted {77			write!(f, "{SECRET_PREFIX}")?;78			// Always base64-encode encrypted fields.79			readable = None;80		}81		if Some(false) == readable.map(is_printable) {82			readable = None83		};84		// TODO: Check if text is readable, and has no unprintable characters?..85		if let Some(plaintext) = readable {86			if plaintext.ends_with('\n') {87				write!(f, "{PLAINTEXT_NEWLINE_PREFIX}")?;88			} else {89				write!(f, "{PLAINTEXT_PREFIX}")?;90			}91			write!(f, "{plaintext}")?;92		} else {93			write!(f, "{BASE64_ENCODED_PREFIX}")?;94			let encoded = STANDARD_NO_PAD.encode(&self.data);95			for ele in encoded.as_bytes().chunks(64) {96				let chunk = std::str::from_utf8(ele).expect(97					"any slice of base64-encoded text is utf-8 compatible, as it is ascii-based",98				);99				writeln!(f, "{chunk}")?;100			}101		};102		Ok(())103	}104}105106fn is_printable(text: &str) -> bool {107	text.chars().all(|c| {108		c.is_letter()109			|| c.is_mark()110			|| c.is_number()111			|| c.is_punctuation()112			|| c.is_separator()113			|| c == '\n' || c == '\t'114			// Complete base64 alphabet115			|| c == '/' || c == '+'116			|| c == '='117	})118}119120#[test]121fn test() {122	fn check_roundtrip(data: SecretData, expected: &str) {123		let string = data.to_string();124		assert_eq!(string, expected, "unexpected encoding");125		let roundtrip: SecretData = string.parse().expect("roundtrip parse");126		assert_eq!(data, roundtrip, "roundtrip didn't match");127	}128	check_roundtrip(129		SecretData {130			data: vec![1, 2, 3, 4, 5, 6],131			encrypted: false,132		},133		"<BASE64-ENCODED>\nAQIDBAUG\n",134	);135	check_roundtrip(136		SecretData {137			data: vec![1, 2, 3, 4, 5, 6],138			encrypted: true,139		},140		"<ENCRYPTED><BASE64-ENCODED>\nAQIDBAUG\n",141	);142	check_roundtrip(143		SecretData {144			data: "Привет, мир!\n".to_owned().into(),145			encrypted: false,146		},147		"<PLAINTEXT-NL>\nПривет, мир!\n",148	);149	check_roundtrip(150		SecretData {151			data: "Привет, мир!".to_owned().into(),152			encrypted: false,153		},154		"<PLAINTEXT>Привет, мир!",155	);156}
after · crates/fleet-shared/src/encoding.rs
1use std::{2	fmt::{self, Display},3	str::FromStr,4};56use base64::engine::{Engine, general_purpose::STANDARD_NO_PAD};7use serde::{Deserialize, Deserializer, Serialize, de::Error};8use unicode_categories::UnicodeCategories;910#[derive(Debug, PartialEq, Clone)]11pub struct SecretData {12	pub data: Vec<u8>,13	pub encrypted: bool,14}1516const BASE64_ENCODED_PREFIX: &str = "<BASE64-ENCODED>\n";17const Z85_ENCODED_PREFIX: &str = "<Z85-ENCODED>\n";18// Multiline text in Nix can only end with \n, which is not cool for actual single-line strings.19const PLAINTEXT_NEWLINE_PREFIX: &str = "<PLAINTEXT-NL>\n";20const PLAINTEXT_PREFIX: &str = "<PLAINTEXT>";2122const SECRET_PREFIX: &str = "<ENCRYPTED>";2324impl<'de> Deserialize<'de> for SecretData {25	fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>26	where27		D: Deserializer<'de>,28	{29		let string = String::deserialize(deserializer)?;30		string.parse().map_err(D::Error::custom)31	}32}3334impl Serialize for SecretData {35	fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>36	where37		S: serde::Serializer,38	{39		self.to_string().serialize(serializer)40	}41}4243impl FromStr for SecretData {44	type Err = String;4546	fn from_str(string: &str) -> Result<Self, Self::Err> {47		let (encrypted, string) = if let Some(unprefixed) = string.strip_prefix(SECRET_PREFIX) {48			(true, unprefixed)49		} else {50			(false, string)51		};52		let data = if let Some(unprefixed) = string.strip_prefix(BASE64_ENCODED_PREFIX) {53			STANDARD_NO_PAD54				.decode(unprefixed.replace(['\n', '\t', ' '], ""))55				.map_err(|e| format!("base64-encoded failed: {e}"))?56		} else if let Some(unprefixed) = string.strip_prefix(Z85_ENCODED_PREFIX) {57			z85::decode(unprefixed.replace(['\n', '\t', ' '], ""))58				.map_err(|e| format!("z85-encoded failed: {e}"))?59		} else if let Some(unprefixed) = string.strip_prefix(PLAINTEXT_NEWLINE_PREFIX) {60			unprefixed.as_bytes().to_owned()61		} else if let Some(unprefixed) = string.strip_prefix(PLAINTEXT_PREFIX) {62			unprefixed.as_bytes().to_owned()63		} else {64			let secret_prefix = format!("{SECRET_PREFIX}{Z85_ENCODED_PREFIX}");65			return Err(format!(66				"unknown secret encoding. If you're migrating from old version of fleet, prefix public secret fields with {PLAINTEXT_PREFIX:?}, and encrypted data with {secret_prefix:?}: {string}"67			));68		};69		Ok(Self { data, encrypted })70	}71}7273impl Display for SecretData {74	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {75		let mut readable = std::str::from_utf8(&self.data).ok();76		if self.encrypted {77			write!(f, "{SECRET_PREFIX}")?;78			// Always base64-encode encrypted fields.79			readable = None;80		}81		if Some(false) == readable.map(is_printable) {82			readable = None83		};84		// TODO: Check if text is readable, and has no unprintable characters?..85		if let Some(plaintext) = readable {86			if plaintext.ends_with('\n') {87				write!(f, "{PLAINTEXT_NEWLINE_PREFIX}")?;88			} else {89				write!(f, "{PLAINTEXT_PREFIX}")?;90			}91			write!(f, "{plaintext}")?;92		} else {93			write!(f, "{BASE64_ENCODED_PREFIX}")?;94			let encoded = STANDARD_NO_PAD.encode(&self.data);95			for ele in encoded.as_bytes().chunks(64) {96				let chunk = std::str::from_utf8(ele).expect(97					"any slice of base64-encoded text is utf-8 compatible, as it is ascii-based",98				);99				writeln!(f, "{chunk}")?;100			}101		};102		Ok(())103	}104}105106fn is_printable(text: &str) -> bool {107	text.chars().all(|c| {108		c.is_letter()109			|| c.is_mark()110			|| c.is_number()111			|| c.is_punctuation()112			|| c.is_separator()113			|| c == '\n' || c == '\t'114			// Complete base64 alphabet115			|| c == '/' || c == '+'116			|| c == '='117	})118}119120#[test]121fn test() {122	fn check_roundtrip(data: SecretData, expected: &str) {123		let string = data.to_string();124		assert_eq!(string, expected, "unexpected encoding");125		let roundtrip: SecretData = string.parse().expect("roundtrip parse");126		assert_eq!(data, roundtrip, "roundtrip didn't match");127	}128	check_roundtrip(129		SecretData {130			data: vec![1, 2, 3, 4, 5, 6],131			encrypted: false,132		},133		"<BASE64-ENCODED>\nAQIDBAUG\n",134	);135	check_roundtrip(136		SecretData {137			data: vec![1, 2, 3, 4, 5, 6],138			encrypted: true,139		},140		"<ENCRYPTED><BASE64-ENCODED>\nAQIDBAUG\n",141	);142	check_roundtrip(143		SecretData {144			data: "Привет, мир!\n".to_owned().into(),145			encrypted: false,146		},147		"<PLAINTEXT-NL>\nПривет, мир!\n",148	);149	check_roundtrip(150		SecretData {151			data: "Привет, мир!".to_owned().into(),152			encrypted: false,153		},154		"<PLAINTEXT>Привет, мир!",155	);156}
modifiedcrates/nixlike/src/lib.rsdiffbeforeafterboth
--- a/crates/nixlike/src/lib.rs
+++ b/crates/nixlike/src/lib.rs
@@ -138,7 +138,7 @@
 					}
 				}
 
-				let key = k.into_iter().last().unwrap();
+				let key = k.into_iter().next_back().unwrap();
 				if map.contains_key(&key) {
 					return Err("can't override object");
 				}
modifiedcrates/nixlike/src/se_impl.rsdiffbeforeafterboth
--- a/crates/nixlike/src/se_impl.rs
+++ b/crates/nixlike/src/se_impl.rs
@@ -27,9 +27,10 @@
 
 	type Error = Error;
 
-	fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error>
+	fn serialize_element<T>(&mut self, value: &T) -> Result<(), Self::Error>
 	where
 		T: serde::Serialize,
+		T: ?Sized,
 	{
 		self.0.push(value.serialize(MySerialize)?);
 		Ok(())
@@ -44,9 +45,10 @@
 
 	type Error = Error;
 
-	fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error>
+	fn serialize_element<T>(&mut self, value: &T) -> Result<(), Self::Error>
 	where
 		T: serde::Serialize,
+		T: ?Sized,
 	{
 		self.0.push(value.serialize(MySerialize)?);
 		Ok(())
@@ -61,9 +63,10 @@
 
 	type Error = Error;
 
-	fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error>
+	fn serialize_field<T>(&mut self, value: &T) -> Result<(), Self::Error>
 	where
 		T: serde::Serialize,
+		T: ?Sized,
 	{
 		self.0.push(value.serialize(MySerialize)?);
 		Ok(())
@@ -81,9 +84,10 @@
 
 	type Error = Error;
 
-	fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error>
+	fn serialize_field<T>(&mut self, value: &T) -> Result<(), Self::Error>
 	where
 		T: serde::Serialize,
+		T: ?Sized,
 	{
 		self.1.serialize_field(value)
 	}
@@ -102,9 +106,10 @@
 
 	type Error = Error;
 
-	fn serialize_key<T: ?Sized>(&mut self, key: &T) -> Result<(), Self::Error>
+	fn serialize_key<T>(&mut self, key: &T) -> Result<(), Self::Error>
 	where
 		T: serde::Serialize,
+		T: ?Sized,
 	{
 		let _ = self
 			.1
@@ -112,9 +117,10 @@
 		Ok(())
 	}
 
-	fn serialize_value<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error>
+	fn serialize_value<T>(&mut self, value: &T) -> Result<(), Self::Error>
 	where
 		T: serde::Serialize,
+		T: ?Sized,
 	{
 		self.0
 			.insert(self.1.take().unwrap(), value.serialize(MySerialize)?);
@@ -133,9 +139,10 @@
 
 	type Error = Error;
 
-	fn serialize_field<T: ?Sized>(&mut self, key: &str, value: &T) -> Result<(), Self::Error>
+	fn serialize_field<T>(&mut self, key: &str, value: &T) -> Result<(), Self::Error>
 	where
 		T: serde::Serialize,
+		T: ?Sized,
 	{
 		self.0.insert(key.to_owned(), value.serialize(MySerialize)?);
 		Ok(())
@@ -153,13 +160,10 @@
 
 	type Error = Error;
 
-	fn serialize_field<T: ?Sized>(
-		&mut self,
-		key: &'static str,
-		value: &T,
-	) -> Result<(), Self::Error>
+	fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error>
 	where
 		T: serde::Serialize,
+		T: ?Sized,
 	{
 		self.1.insert(key.to_owned(), value.serialize(MySerialize)?);
 		Ok(())
@@ -253,9 +257,10 @@
 		Ok(Value::Null)
 	}
 
-	fn serialize_some<T: ?Sized>(self, value: &T) -> Result<Self::Ok, Self::Error>
+	fn serialize_some<T>(self, value: &T) -> Result<Self::Ok, Self::Error>
 	where
 		T: serde::Serialize,
+		T: ?Sized,
 	{
 		value.serialize(self)
 	}
@@ -277,18 +282,19 @@
 		Ok(Value::String(variant.to_string()))
 	}
 
-	fn serialize_newtype_struct<T: ?Sized>(
+	fn serialize_newtype_struct<T>(
 		self,
 		_name: &'static str,
 		value: &T,
 	) -> Result<Self::Ok, Self::Error>
 	where
 		T: serde::Serialize,
+		T: ?Sized,
 	{
 		value.serialize(self)
 	}
 
-	fn serialize_newtype_variant<T: ?Sized>(
+	fn serialize_newtype_variant<T>(
 		self,
 		_name: &'static str,
 		_variant_index: u32,
@@ -297,6 +303,7 @@
 	) -> Result<Self::Ok, Self::Error>
 	where
 		T: serde::Serialize,
+		T: ?Sized,
 	{
 		Ok(Value::Object(
 			vec![(variant.to_string(), value.serialize(self)?)]