From 3ce540149328d968a8d4337bb39d75d1848c7e5f Mon Sep 17 00:00:00 2001 From: Kolby Moroz Liebl <31669092+KolbyML@users.noreply.github.com> Date: Sat, 1 Feb 2025 11:15:01 -0700 Subject: [PATCH 1/2] feat: implement Debug for PingError so messages display --- .../ping_extensions/extensions/type_65535.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/crates/ethportal-api/src/types/ping_extensions/extensions/type_65535.rs b/crates/ethportal-api/src/types/ping_extensions/extensions/type_65535.rs index 907a9eb06..4aa103ab6 100644 --- a/crates/ethportal-api/src/types/ping_extensions/extensions/type_65535.rs +++ b/crates/ethportal-api/src/types/ping_extensions/extensions/type_65535.rs @@ -1,12 +1,14 @@ +use std::fmt::Debug; + use anyhow::anyhow; use ssz::Encode; use ssz_derive::{Decode, Encode}; use ssz_types::{typenum::U300, VariableList}; -use crate::types::portal_wire::CustomPayload; +use crate::{types::portal_wire::CustomPayload, utils::bytes::hex_encode}; /// Used to respond to pings which the node can't handle -#[derive(PartialEq, Debug, Clone, Encode, Decode)] +#[derive(Eq, PartialEq, Clone, Encode, Decode)] pub struct PingError { pub error_code: u16, pub message: VariableList, @@ -30,6 +32,18 @@ impl PingError { } } +impl Debug for PingError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let message = String::from_utf8(self.message.to_vec()) + .unwrap_or_else(|_| format!("Invalid utf8 string: {}", hex_encode(&*self.message))); + + f.debug_struct("PingError") + .field("error_code", &self.error_code) + .field("message", &message) + .finish() + } +} + impl From for CustomPayload { fn from(ping_error: PingError) -> Self { CustomPayload::from(ping_error.as_ssz_bytes()) From 985c796a765cc04a142eea3bea5ee61daa6cdb57 Mon Sep 17 00:00:00 2001 From: Kolby Moroz Liebl <31669092+KolbyML@users.noreply.github.com> Date: Sat, 1 Feb 2025 13:03:11 -0700 Subject: [PATCH 2/2] fix: use cow --- .../types/ping_extensions/extensions/type_65535.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/crates/ethportal-api/src/types/ping_extensions/extensions/type_65535.rs b/crates/ethportal-api/src/types/ping_extensions/extensions/type_65535.rs index 4aa103ab6..8639af4ff 100644 --- a/crates/ethportal-api/src/types/ping_extensions/extensions/type_65535.rs +++ b/crates/ethportal-api/src/types/ping_extensions/extensions/type_65535.rs @@ -1,4 +1,4 @@ -use std::fmt::Debug; +use std::{borrow::Cow, fmt::Debug, ops::Deref, str}; use anyhow::anyhow; use ssz::Encode; @@ -34,8 +34,14 @@ impl PingError { impl Debug for PingError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let message = String::from_utf8(self.message.to_vec()) - .unwrap_or_else(|_| format!("Invalid utf8 string: {}", hex_encode(&*self.message))); + let message = str::from_utf8(self.message.deref()) + .map(Cow::Borrowed) + .unwrap_or_else(|_| { + Cow::Owned(format!( + "Invalid utf8 string: {}", + hex_encode(self.message.deref()) + )) + }); f.debug_struct("PingError") .field("error_code", &self.error_code)