use std::borrow::Borrow; use std::fmt; use std::ops::Deref; use serde::Deserialize; use serde::Serialize; #[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)] #[serde(transparent)] pub struct ProcessId(String); impl ProcessId { pub fn new(value: impl Into) -> Self { Self(value.into()) } pub fn as_str(&self) -> &str { &self.0 } pub fn into_inner(self) -> String { self.0 } } impl Deref for ProcessId { type Target = str; fn deref(&self) -> &Self::Target { self.as_str() } } impl Borrow for ProcessId { fn borrow(&self) -> &str { self.as_str() } } impl AsRef for ProcessId { fn as_ref(&self) -> &str { self.as_str() } } impl fmt::Display for ProcessId { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { self.0.fmt(f) } } impl From for ProcessId { fn from(value: String) -> Self { Self(value) } } impl From<&str> for ProcessId { fn from(value: &str) -> Self { Self(value.to_string()) } } impl From<&String> for ProcessId { fn from(value: &String) -> Self { Self(value.clone()) } } impl From for String { fn from(value: ProcessId) -> Self { value.0 } }