1#![stable(feature = "core_ascii", since = "1.26.0")]
11
12#[cfg(not(feature = "ferrocene_subset"))]
13use crate::escape::{AlwaysEscaped, EscapeIterInner};
14#[cfg(not(feature = "ferrocene_subset"))]
15use crate::fmt;
16#[cfg(not(feature = "ferrocene_subset"))]
17use crate::iter::FusedIterator;
18#[cfg(not(feature = "ferrocene_subset"))]
19use crate::num::NonZero;
20
21mod ascii_char;
22#[doc(alias("AsciiChar"))]
23#[unstable(feature = "ascii_char", issue = "110998")]
24pub use ascii_char::AsciiChar as Char;
25
26#[must_use = "iterators are lazy and do nothing unless consumed"]
31#[stable(feature = "rust1", since = "1.0.0")]
32#[derive(Clone)]
33#[cfg(not(feature = "ferrocene_subset"))]
34pub struct EscapeDefault(EscapeIterInner<4, AlwaysEscaped>);
35
36#[stable(feature = "rust1", since = "1.0.0")]
99#[cfg(not(feature = "ferrocene_subset"))]
100pub fn escape_default(c: u8) -> EscapeDefault {
101 EscapeDefault::new(c)
102}
103
104#[cfg(not(feature = "ferrocene_subset"))]
105impl EscapeDefault {
106 #[inline]
107 pub(crate) const fn new(c: u8) -> Self {
108 Self(EscapeIterInner::ascii(c))
109 }
110
111 #[inline]
112 pub(crate) fn empty() -> Self {
113 Self(EscapeIterInner::empty())
114 }
115}
116
117#[stable(feature = "rust1", since = "1.0.0")]
118#[cfg(not(feature = "ferrocene_subset"))]
119impl Iterator for EscapeDefault {
120 type Item = u8;
121
122 #[inline]
123 fn next(&mut self) -> Option<u8> {
124 self.0.next()
125 }
126
127 #[inline]
128 fn size_hint(&self) -> (usize, Option<usize>) {
129 let n = self.0.len();
130 (n, Some(n))
131 }
132
133 #[inline]
134 fn count(self) -> usize {
135 self.0.len()
136 }
137
138 #[inline]
139 fn last(mut self) -> Option<u8> {
140 self.0.next_back()
141 }
142
143 #[inline]
144 fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>> {
145 self.0.advance_by(n)
146 }
147}
148
149#[stable(feature = "rust1", since = "1.0.0")]
150#[cfg(not(feature = "ferrocene_subset"))]
151impl DoubleEndedIterator for EscapeDefault {
152 #[inline]
153 fn next_back(&mut self) -> Option<u8> {
154 self.0.next_back()
155 }
156
157 #[inline]
158 fn advance_back_by(&mut self, n: usize) -> Result<(), NonZero<usize>> {
159 self.0.advance_back_by(n)
160 }
161}
162
163#[stable(feature = "rust1", since = "1.0.0")]
164#[cfg(not(feature = "ferrocene_subset"))]
165impl ExactSizeIterator for EscapeDefault {
166 #[inline]
167 fn len(&self) -> usize {
168 self.0.len()
169 }
170}
171
172#[stable(feature = "fused", since = "1.26.0")]
173#[cfg(not(feature = "ferrocene_subset"))]
174impl FusedIterator for EscapeDefault {}
175
176#[stable(feature = "ascii_escape_display", since = "1.39.0")]
177#[cfg(not(feature = "ferrocene_subset"))]
178impl fmt::Display for EscapeDefault {
179 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
180 fmt::Display::fmt(&self.0, f)
181 }
182}
183
184#[stable(feature = "std_debug", since = "1.16.0")]
185#[cfg(not(feature = "ferrocene_subset"))]
186impl fmt::Debug for EscapeDefault {
187 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
188 f.debug_struct("EscapeDefault").finish_non_exhaustive()
189 }
190}