shell_sanitize/
sanitized.rs1use std::fmt;
2use std::marker::PhantomData;
3
4use crate::marker::MarkerType;
5
6#[derive(Clone, PartialEq, Eq, Hash)]
23pub struct Sanitized<T: MarkerType> {
24 value: String,
25 _marker: PhantomData<T>,
26}
27
28impl<T: MarkerType> Sanitized<T> {
29 pub(crate) fn new(value: String) -> Self {
33 Self {
34 value,
35 _marker: PhantomData,
36 }
37 }
38
39 #[must_use]
41 pub fn as_str(&self) -> &str {
42 &self.value
43 }
44
45 #[must_use]
47 pub fn into_inner(self) -> String {
48 self.value
49 }
50}
51
52impl<T: MarkerType> AsRef<str> for Sanitized<T> {
53 fn as_ref(&self) -> &str {
54 &self.value
55 }
56}
57
58impl<T: MarkerType> fmt::Debug for Sanitized<T> {
59 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
60 write!(f, "Sanitized<{}>({:?})", T::label(), self.value)
61 }
62}
63
64impl<T: MarkerType> fmt::Display for Sanitized<T> {
65 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
66 write!(f, "{}", self.value)
67 }
68}