1use crate::mem::transmute;
7use crate::{assert_unsafe_precondition, fmt};
8
9#[derive(#[automatically_derived]
#[unstable(feature = "ascii_char", issue = "110998")]
impl crate::marker::Copy for AsciiChar { }Copy, #[automatically_derived]
#[unstable(feature = "ascii_char", issue = "110998")]
impl crate::hash::Hash for AsciiChar {
#[inline]
fn hash<__H: crate::hash::Hasher>(&self, state: &mut __H) {
let __self_discr = crate::intrinsics::discriminant_value(self);
crate::hash::Hash::hash(&__self_discr, state)
}
}Hash)]
58#[derive_const(#[automatically_derived]
#[rustc_const_unstable(feature = "derive_const", issue = "118304")]
#[doc(hidden)]
#[unstable(feature = "ascii_char", issue = "110998")]
const unsafe impl crate::clone::TrivialClone for AsciiChar { }
#[automatically_derived]
#[rustc_const_unstable(feature = "derive_const", issue = "118304")]
#[unstable(feature = "ascii_char", issue = "110998")]
const impl crate::clone::Clone for AsciiChar {
#[inline]
fn clone(&self) -> AsciiChar { *self }
}Clone, #[automatically_derived]
#[rustc_const_unstable(feature = "derive_const", issue = "118304")]
#[unstable(feature = "ascii_char", issue = "110998")]
const impl crate::cmp::Eq for AsciiChar {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {}
}Eq, #[automatically_derived]
#[unstable(feature = "ascii_char", issue = "110998")]
impl crate::marker::StructuralPartialEq for AsciiChar { }
#[automatically_derived]
#[rustc_const_unstable(feature = "derive_const", issue = "118304")]
#[unstable(feature = "ascii_char", issue = "110998")]
const impl crate::cmp::PartialEq for AsciiChar {
#[inline]
fn eq(&self, other: &AsciiChar) -> bool {
let __self_discr = crate::intrinsics::discriminant_value(self);
let __arg1_discr = crate::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, #[automatically_derived]
#[rustc_const_unstable(feature = "derive_const", issue = "118304")]
#[unstable(feature = "ascii_char", issue = "110998")]
const impl crate::cmp::Ord for AsciiChar {
#[inline]
fn cmp(&self, other: &AsciiChar) -> crate::cmp::Ordering {
let __self_discr = crate::intrinsics::discriminant_value(self);
let __arg1_discr = crate::intrinsics::discriminant_value(other);
crate::cmp::Ord::cmp(&__self_discr, &__arg1_discr)
}
}Ord, #[automatically_derived]
#[rustc_const_unstable(feature = "derive_const", issue = "118304")]
#[unstable(feature = "ascii_char", issue = "110998")]
const impl crate::cmp::PartialOrd for AsciiChar {
#[inline]
fn partial_cmp(&self, other: &AsciiChar)
-> crate::option::Option<crate::cmp::Ordering> {
crate::option::Option::Some(crate::cmp::Ord::cmp(self, other))
}
}PartialOrd)]
59#[unstable(feature = "ascii_char", issue = "110998")]
60#[repr(u8)]
61pub enum AsciiChar {
62 #[unstable(feature = "ascii_char_variants", issue = "110998")]
64 Null = 0,
65 #[unstable(feature = "ascii_char_variants", issue = "110998")]
67 StartOfHeading = 1,
68 #[unstable(feature = "ascii_char_variants", issue = "110998")]
70 StartOfText = 2,
71 #[unstable(feature = "ascii_char_variants", issue = "110998")]
73 EndOfText = 3,
74 #[unstable(feature = "ascii_char_variants", issue = "110998")]
76 EndOfTransmission = 4,
77 #[unstable(feature = "ascii_char_variants", issue = "110998")]
79 Enquiry = 5,
80 #[unstable(feature = "ascii_char_variants", issue = "110998")]
82 Acknowledge = 6,
83 #[unstable(feature = "ascii_char_variants", issue = "110998")]
85 Bell = 7,
86 #[unstable(feature = "ascii_char_variants", issue = "110998")]
88 Backspace = 8,
89 #[unstable(feature = "ascii_char_variants", issue = "110998")]
91 CharacterTabulation = 9,
92 #[unstable(feature = "ascii_char_variants", issue = "110998")]
94 LineFeed = 10,
95 #[unstable(feature = "ascii_char_variants", issue = "110998")]
97 LineTabulation = 11,
98 #[unstable(feature = "ascii_char_variants", issue = "110998")]
100 FormFeed = 12,
101 #[unstable(feature = "ascii_char_variants", issue = "110998")]
103 CarriageReturn = 13,
104 #[unstable(feature = "ascii_char_variants", issue = "110998")]
106 ShiftOut = 14,
107 #[unstable(feature = "ascii_char_variants", issue = "110998")]
109 ShiftIn = 15,
110 #[unstable(feature = "ascii_char_variants", issue = "110998")]
112 DataLinkEscape = 16,
113 #[unstable(feature = "ascii_char_variants", issue = "110998")]
115 DeviceControlOne = 17,
116 #[unstable(feature = "ascii_char_variants", issue = "110998")]
118 DeviceControlTwo = 18,
119 #[unstable(feature = "ascii_char_variants", issue = "110998")]
121 DeviceControlThree = 19,
122 #[unstable(feature = "ascii_char_variants", issue = "110998")]
124 DeviceControlFour = 20,
125 #[unstable(feature = "ascii_char_variants", issue = "110998")]
127 NegativeAcknowledge = 21,
128 #[unstable(feature = "ascii_char_variants", issue = "110998")]
130 SynchronousIdle = 22,
131 #[unstable(feature = "ascii_char_variants", issue = "110998")]
133 EndOfTransmissionBlock = 23,
134 #[unstable(feature = "ascii_char_variants", issue = "110998")]
136 Cancel = 24,
137 #[unstable(feature = "ascii_char_variants", issue = "110998")]
139 EndOfMedium = 25,
140 #[unstable(feature = "ascii_char_variants", issue = "110998")]
142 Substitute = 26,
143 #[unstable(feature = "ascii_char_variants", issue = "110998")]
145 Escape = 27,
146 #[unstable(feature = "ascii_char_variants", issue = "110998")]
148 InformationSeparatorFour = 28,
149 #[unstable(feature = "ascii_char_variants", issue = "110998")]
151 InformationSeparatorThree = 29,
152 #[unstable(feature = "ascii_char_variants", issue = "110998")]
154 InformationSeparatorTwo = 30,
155 #[unstable(feature = "ascii_char_variants", issue = "110998")]
157 InformationSeparatorOne = 31,
158 #[unstable(feature = "ascii_char_variants", issue = "110998")]
160 Space = 32,
161 #[unstable(feature = "ascii_char_variants", issue = "110998")]
163 ExclamationMark = 33,
164 #[unstable(feature = "ascii_char_variants", issue = "110998")]
166 QuotationMark = 34,
167 #[unstable(feature = "ascii_char_variants", issue = "110998")]
169 NumberSign = 35,
170 #[unstable(feature = "ascii_char_variants", issue = "110998")]
172 DollarSign = 36,
173 #[unstable(feature = "ascii_char_variants", issue = "110998")]
175 PercentSign = 37,
176 #[unstable(feature = "ascii_char_variants", issue = "110998")]
178 Ampersand = 38,
179 #[unstable(feature = "ascii_char_variants", issue = "110998")]
181 Apostrophe = 39,
182 #[unstable(feature = "ascii_char_variants", issue = "110998")]
184 LeftParenthesis = 40,
185 #[unstable(feature = "ascii_char_variants", issue = "110998")]
187 RightParenthesis = 41,
188 #[unstable(feature = "ascii_char_variants", issue = "110998")]
190 Asterisk = 42,
191 #[unstable(feature = "ascii_char_variants", issue = "110998")]
193 PlusSign = 43,
194 #[unstable(feature = "ascii_char_variants", issue = "110998")]
196 Comma = 44,
197 #[unstable(feature = "ascii_char_variants", issue = "110998")]
199 HyphenMinus = 45,
200 #[unstable(feature = "ascii_char_variants", issue = "110998")]
202 FullStop = 46,
203 #[unstable(feature = "ascii_char_variants", issue = "110998")]
205 Solidus = 47,
206 #[unstable(feature = "ascii_char_variants", issue = "110998")]
208 Digit0 = 48,
209 #[unstable(feature = "ascii_char_variants", issue = "110998")]
211 Digit1 = 49,
212 #[unstable(feature = "ascii_char_variants", issue = "110998")]
214 Digit2 = 50,
215 #[unstable(feature = "ascii_char_variants", issue = "110998")]
217 Digit3 = 51,
218 #[unstable(feature = "ascii_char_variants", issue = "110998")]
220 Digit4 = 52,
221 #[unstable(feature = "ascii_char_variants", issue = "110998")]
223 Digit5 = 53,
224 #[unstable(feature = "ascii_char_variants", issue = "110998")]
226 Digit6 = 54,
227 #[unstable(feature = "ascii_char_variants", issue = "110998")]
229 Digit7 = 55,
230 #[unstable(feature = "ascii_char_variants", issue = "110998")]
232 Digit8 = 56,
233 #[unstable(feature = "ascii_char_variants", issue = "110998")]
235 Digit9 = 57,
236 #[unstable(feature = "ascii_char_variants", issue = "110998")]
238 Colon = 58,
239 #[unstable(feature = "ascii_char_variants", issue = "110998")]
241 Semicolon = 59,
242 #[unstable(feature = "ascii_char_variants", issue = "110998")]
244 LessThanSign = 60,
245 #[unstable(feature = "ascii_char_variants", issue = "110998")]
247 EqualsSign = 61,
248 #[unstable(feature = "ascii_char_variants", issue = "110998")]
250 GreaterThanSign = 62,
251 #[unstable(feature = "ascii_char_variants", issue = "110998")]
253 QuestionMark = 63,
254 #[unstable(feature = "ascii_char_variants", issue = "110998")]
256 CommercialAt = 64,
257 #[unstable(feature = "ascii_char_variants", issue = "110998")]
259 CapitalA = 65,
260 #[unstable(feature = "ascii_char_variants", issue = "110998")]
262 CapitalB = 66,
263 #[unstable(feature = "ascii_char_variants", issue = "110998")]
265 CapitalC = 67,
266 #[unstable(feature = "ascii_char_variants", issue = "110998")]
268 CapitalD = 68,
269 #[unstable(feature = "ascii_char_variants", issue = "110998")]
271 CapitalE = 69,
272 #[unstable(feature = "ascii_char_variants", issue = "110998")]
274 CapitalF = 70,
275 #[unstable(feature = "ascii_char_variants", issue = "110998")]
277 CapitalG = 71,
278 #[unstable(feature = "ascii_char_variants", issue = "110998")]
280 CapitalH = 72,
281 #[unstable(feature = "ascii_char_variants", issue = "110998")]
283 CapitalI = 73,
284 #[unstable(feature = "ascii_char_variants", issue = "110998")]
286 CapitalJ = 74,
287 #[unstable(feature = "ascii_char_variants", issue = "110998")]
289 CapitalK = 75,
290 #[unstable(feature = "ascii_char_variants", issue = "110998")]
292 CapitalL = 76,
293 #[unstable(feature = "ascii_char_variants", issue = "110998")]
295 CapitalM = 77,
296 #[unstable(feature = "ascii_char_variants", issue = "110998")]
298 CapitalN = 78,
299 #[unstable(feature = "ascii_char_variants", issue = "110998")]
301 CapitalO = 79,
302 #[unstable(feature = "ascii_char_variants", issue = "110998")]
304 CapitalP = 80,
305 #[unstable(feature = "ascii_char_variants", issue = "110998")]
307 CapitalQ = 81,
308 #[unstable(feature = "ascii_char_variants", issue = "110998")]
310 CapitalR = 82,
311 #[unstable(feature = "ascii_char_variants", issue = "110998")]
313 CapitalS = 83,
314 #[unstable(feature = "ascii_char_variants", issue = "110998")]
316 CapitalT = 84,
317 #[unstable(feature = "ascii_char_variants", issue = "110998")]
319 CapitalU = 85,
320 #[unstable(feature = "ascii_char_variants", issue = "110998")]
322 CapitalV = 86,
323 #[unstable(feature = "ascii_char_variants", issue = "110998")]
325 CapitalW = 87,
326 #[unstable(feature = "ascii_char_variants", issue = "110998")]
328 CapitalX = 88,
329 #[unstable(feature = "ascii_char_variants", issue = "110998")]
331 CapitalY = 89,
332 #[unstable(feature = "ascii_char_variants", issue = "110998")]
334 CapitalZ = 90,
335 #[unstable(feature = "ascii_char_variants", issue = "110998")]
337 LeftSquareBracket = 91,
338 #[unstable(feature = "ascii_char_variants", issue = "110998")]
340 ReverseSolidus = 92,
341 #[unstable(feature = "ascii_char_variants", issue = "110998")]
343 RightSquareBracket = 93,
344 #[unstable(feature = "ascii_char_variants", issue = "110998")]
346 CircumflexAccent = 94,
347 #[unstable(feature = "ascii_char_variants", issue = "110998")]
349 LowLine = 95,
350 #[unstable(feature = "ascii_char_variants", issue = "110998")]
352 GraveAccent = 96,
353 #[unstable(feature = "ascii_char_variants", issue = "110998")]
355 SmallA = 97,
356 #[unstable(feature = "ascii_char_variants", issue = "110998")]
358 SmallB = 98,
359 #[unstable(feature = "ascii_char_variants", issue = "110998")]
361 SmallC = 99,
362 #[unstable(feature = "ascii_char_variants", issue = "110998")]
364 SmallD = 100,
365 #[unstable(feature = "ascii_char_variants", issue = "110998")]
367 SmallE = 101,
368 #[unstable(feature = "ascii_char_variants", issue = "110998")]
370 SmallF = 102,
371 #[unstable(feature = "ascii_char_variants", issue = "110998")]
373 SmallG = 103,
374 #[unstable(feature = "ascii_char_variants", issue = "110998")]
376 SmallH = 104,
377 #[unstable(feature = "ascii_char_variants", issue = "110998")]
379 SmallI = 105,
380 #[unstable(feature = "ascii_char_variants", issue = "110998")]
382 SmallJ = 106,
383 #[unstable(feature = "ascii_char_variants", issue = "110998")]
385 SmallK = 107,
386 #[unstable(feature = "ascii_char_variants", issue = "110998")]
388 SmallL = 108,
389 #[unstable(feature = "ascii_char_variants", issue = "110998")]
391 SmallM = 109,
392 #[unstable(feature = "ascii_char_variants", issue = "110998")]
394 SmallN = 110,
395 #[unstable(feature = "ascii_char_variants", issue = "110998")]
397 SmallO = 111,
398 #[unstable(feature = "ascii_char_variants", issue = "110998")]
400 SmallP = 112,
401 #[unstable(feature = "ascii_char_variants", issue = "110998")]
403 SmallQ = 113,
404 #[unstable(feature = "ascii_char_variants", issue = "110998")]
406 SmallR = 114,
407 #[unstable(feature = "ascii_char_variants", issue = "110998")]
409 SmallS = 115,
410 #[unstable(feature = "ascii_char_variants", issue = "110998")]
412 SmallT = 116,
413 #[unstable(feature = "ascii_char_variants", issue = "110998")]
415 SmallU = 117,
416 #[unstable(feature = "ascii_char_variants", issue = "110998")]
418 SmallV = 118,
419 #[unstable(feature = "ascii_char_variants", issue = "110998")]
421 SmallW = 119,
422 #[unstable(feature = "ascii_char_variants", issue = "110998")]
424 SmallX = 120,
425 #[unstable(feature = "ascii_char_variants", issue = "110998")]
427 SmallY = 121,
428 #[unstable(feature = "ascii_char_variants", issue = "110998")]
430 SmallZ = 122,
431 #[unstable(feature = "ascii_char_variants", issue = "110998")]
433 LeftCurlyBracket = 123,
434 #[unstable(feature = "ascii_char_variants", issue = "110998")]
436 VerticalLine = 124,
437 #[unstable(feature = "ascii_char_variants", issue = "110998")]
439 RightCurlyBracket = 125,
440 #[unstable(feature = "ascii_char_variants", issue = "110998")]
442 Tilde = 126,
443 #[unstable(feature = "ascii_char_variants", issue = "110998")]
445 Delete = 127,
446}
447
448impl AsciiChar {
449 #[unstable(feature = "ascii_char", issue = "110998")]
451 pub const MIN: Self = Self::Null;
452
453 #[unstable(feature = "ascii_char", issue = "110998")]
455 pub const MAX: Self = Self::Delete;
456
457 #[unstable(feature = "ascii_char", issue = "110998")]
460 #[inline]
461 pub const fn from_u8(b: u8) -> Option<Self> {
462 if b <= 127 {
463 Some(unsafe { Self::from_u8_unchecked(b) })
465 } else {
466 None
467 }
468 }
469
470 #[unstable(feature = "ascii_char", issue = "110998")]
477 #[inline]
478 pub const unsafe fn from_u8_unchecked(b: u8) -> Self {
479 {
#[rustc_no_mir_inline]
#[inline]
#[rustc_nounwind]
#[track_caller]
const fn precondition_check(b: u8) {
if !(b <= 127) {
let msg =
"unsafe precondition(s) violated: `ascii::Char::from_u8_unchecked` input cannot exceed 127.\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.";
::core::panicking::panic_nounwind_fmt(::core::fmt::Arguments::from_str(msg),
false);
}
}
if ::core::ub_checks::check_library_ub() { precondition_check(b); }
};assert_unsafe_precondition!(
480 check_library_ub,
481 "`ascii::Char::from_u8_unchecked` input cannot exceed 127.",
482 (b: u8 = b) => b <= 127,
483 );
484 unsafe { transmute(b) }
486 }
487
488 #[unstable(feature = "ascii_char", issue = "110998")]
493 #[inline]
494 pub const fn digit(d: u8) -> Option<Self> {
495 if d < 10 {
496 Some(unsafe { Self::digit_unchecked(d) })
498 } else {
499 None
500 }
501 }
502
503 #[unstable(feature = "ascii_char", issue = "110998")]
519 #[inline]
520 #[track_caller]
521 pub const unsafe fn digit_unchecked(d: u8) -> Self {
522 {
#[rustc_no_mir_inline]
#[inline]
#[rustc_nounwind]
#[track_caller]
const fn precondition_check(d: u8) {
if !(d < 10) {
let msg =
"unsafe precondition(s) violated: `ascii::Char::digit_unchecked` input cannot exceed 9.\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.";
::core::panicking::panic_nounwind_fmt(::core::fmt::Arguments::from_str(msg),
false);
}
}
if ::core::ub_checks::check_library_ub() { precondition_check(d); }
};assert_unsafe_precondition!(
523 check_library_ub,
524 "`ascii::Char::digit_unchecked` input cannot exceed 9.",
525 (d: u8 = d) => d < 10
526 );
527
528 unsafe {
532 let byte = b'0'.unchecked_add(d);
533 Self::from_u8_unchecked(byte)
534 }
535 }
536
537 #[unstable(feature = "ascii_char", issue = "110998")]
539 #[inline]
540 pub const fn to_u8(self) -> u8 {
541 self as u8
542 }
543
544 #[unstable(feature = "ascii_char", issue = "110998")]
546 #[inline]
547 pub const fn to_char(self) -> char {
548 self as u8 as char
549 }
550
551 #[unstable(feature = "ascii_char", issue = "110998")]
553 #[inline]
554 pub const fn as_str(&self) -> &str {
555 crate::slice::from_ref(self).as_str()
556 }
557
558 #[must_use = "to uppercase the value in-place, use `make_uppercase()`"]
580 #[unstable(feature = "ascii_char", issue = "110998")]
581 #[inline]
582 pub const fn to_uppercase(self) -> Self {
583 let uppercase_byte = self.to_u8().to_ascii_uppercase();
584 unsafe { Self::from_u8_unchecked(uppercase_byte) }
586 }
587
588 #[must_use = "to lowercase the value in-place, use `make_lowercase()`"]
610 #[unstable(feature = "ascii_char", issue = "110998")]
611 #[inline]
612 pub const fn to_lowercase(self) -> Self {
613 let lowercase_byte = self.to_u8().to_ascii_lowercase();
614 unsafe { Self::from_u8_unchecked(lowercase_byte) }
616 }
617
618 #[unstable(feature = "ascii_char", issue = "110998")]
634 #[inline]
635 pub const fn eq_ignore_case(self, other: Self) -> bool {
636 self.to_u8().eq_ignore_ascii_case(&other.to_u8())
639 }
640
641 #[unstable(feature = "ascii_char", issue = "110998")]
663 #[inline]
664 pub const fn make_uppercase(&mut self) {
665 *self = self.to_uppercase();
666 }
667
668 #[unstable(feature = "ascii_char", issue = "110998")]
690 #[inline]
691 pub const fn make_lowercase(&mut self) {
692 *self = self.to_lowercase();
693 }
694
695 #[must_use]
727 #[unstable(feature = "ascii_char", issue = "110998")]
728 #[inline]
729 pub const fn is_alphabetic(self) -> bool {
730 self.to_u8().is_ascii_alphabetic()
731 }
732
733 #[must_use]
763 #[unstable(feature = "ascii_char", issue = "110998")]
764 #[inline]
765 pub const fn is_uppercase(self) -> bool {
766 self.to_u8().is_ascii_uppercase()
767 }
768
769 #[must_use]
799 #[unstable(feature = "ascii_char", issue = "110998")]
800 #[inline]
801 pub const fn is_lowercase(self) -> bool {
802 self.to_u8().is_ascii_lowercase()
803 }
804
805 #[must_use]
838 #[unstable(feature = "ascii_char", issue = "110998")]
839 #[inline]
840 pub const fn is_alphanumeric(self) -> bool {
841 self.to_u8().is_ascii_alphanumeric()
842 }
843
844 #[must_use]
874 #[unstable(feature = "ascii_char", issue = "110998")]
875 #[inline]
876 pub const fn is_digit(self) -> bool {
877 self.to_u8().is_ascii_digit()
878 }
879
880 #[must_use]
909 #[unstable(feature = "ascii_char", issue = "110998")]
912 #[inline]
914 pub const fn is_octdigit(self) -> bool {
915 self.to_u8().is_ascii_octdigit()
916 }
917
918 #[must_use]
951 #[unstable(feature = "ascii_char", issue = "110998")]
952 #[inline]
953 pub const fn is_hexdigit(self) -> bool {
954 self.to_u8().is_ascii_hexdigit()
955 }
956
957 #[must_use]
992 #[unstable(feature = "ascii_char", issue = "110998")]
993 #[inline]
994 pub const fn is_punctuation(self) -> bool {
995 self.to_u8().is_ascii_punctuation()
996 }
997
998 #[must_use]
1029 #[unstable(feature = "ascii_char", issue = "110998")]
1030 #[inline]
1031 pub const fn is_graphic(self) -> bool {
1032 self.to_u8().is_ascii_graphic()
1033 }
1034
1035 #[must_use]
1082 #[unstable(feature = "ascii_char", issue = "110998")]
1083 #[inline]
1084 pub const fn is_whitespace(self) -> bool {
1085 self.to_u8().is_ascii_whitespace()
1086 }
1087
1088 #[must_use]
1120 #[unstable(feature = "ascii_char", issue = "110998")]
1121 #[inline]
1122 pub const fn is_control(self) -> bool {
1123 self.to_u8().is_ascii_control()
1124 }
1125
1126 #[must_use = "this returns the escaped character as an iterator, \
1155 without modifying the original"]
1156 #[unstable(feature = "ascii_char", issue = "110998")]
1157 #[inline]
1158 pub fn escape_ascii(self) -> super::EscapeDefault {
1159 super::escape_default(self.to_u8())
1160 }
1161}
1162
1163macro_rules! into_int_impl {
1164 ($($ty:ty)*) => {
1165 $(
1166 #[unstable(feature = "ascii_char", issue = "110998")]
1167 #[rustc_const_unstable(feature = "const_convert", issue = "143773")]
1168 const impl From<AsciiChar> for $ty {
1169 #[inline]
1170 fn from(chr: AsciiChar) -> $ty {
1171 chr as u8 as $ty
1172 }
1173 }
1174 )*
1175 }
1176}
1177
1178#[unstable(feature = "ascii_char", issue = "110998")]
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
const impl From<AsciiChar> for u8 {
#[inline]
fn from(chr: AsciiChar) -> u8 { chr as u8 as u8 }
}
#[unstable(feature = "ascii_char", issue = "110998")]
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
const impl From<AsciiChar> for u16 {
#[inline]
fn from(chr: AsciiChar) -> u16 { chr as u8 as u16 }
}
#[unstable(feature = "ascii_char", issue = "110998")]
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
const impl From<AsciiChar> for u32 {
#[inline]
fn from(chr: AsciiChar) -> u32 { chr as u8 as u32 }
}
#[unstable(feature = "ascii_char", issue = "110998")]
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
const impl From<AsciiChar> for u64 {
#[inline]
fn from(chr: AsciiChar) -> u64 { chr as u8 as u64 }
}
#[unstable(feature = "ascii_char", issue = "110998")]
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
const impl From<AsciiChar> for u128 {
#[inline]
fn from(chr: AsciiChar) -> u128 { chr as u8 as u128 }
}
#[unstable(feature = "ascii_char", issue = "110998")]
#[rustc_const_unstable(feature = "const_convert", issue = "143773")]
const impl From<AsciiChar> for char {
#[inline]
fn from(chr: AsciiChar) -> char { chr as u8 as char }
}into_int_impl!(u8 u16 u32 u64 u128 char);
1179
1180impl [AsciiChar] {
1181 #[unstable(feature = "ascii_char", issue = "110998")]
1183 #[inline]
1184 pub const fn as_str(&self) -> &str {
1185 let ascii_ptr: *const Self = self;
1186 let str_ptr = ascii_ptr as *const str;
1187 unsafe { &*str_ptr }
1190 }
1191
1192 #[unstable(feature = "ascii_char", issue = "110998")]
1194 #[inline]
1195 pub const fn as_bytes(&self) -> &[u8] {
1196 self.as_str().as_bytes()
1197 }
1198}
1199
1200#[unstable(feature = "ascii_char", issue = "110998")]
1201impl fmt::Display for AsciiChar {
1202 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
1203 <str as fmt::Display>::fmt(self.as_str(), f)
1204 }
1205}
1206
1207#[unstable(feature = "ascii_char", issue = "110998")]
1208impl fmt::Debug for AsciiChar {
1209 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
1210 use AsciiChar::{Apostrophe, Null, ReverseSolidus as Backslash};
1211
1212 fn backslash(a: AsciiChar) -> ([AsciiChar; 6], usize) {
1213 ([Apostrophe, Backslash, a, Apostrophe, Null, Null], 4)
1214 }
1215
1216 let (buf, len) = match self {
1217 AsciiChar::Null => backslash(AsciiChar::Digit0),
1218 AsciiChar::CharacterTabulation => backslash(AsciiChar::SmallT),
1219 AsciiChar::CarriageReturn => backslash(AsciiChar::SmallR),
1220 AsciiChar::LineFeed => backslash(AsciiChar::SmallN),
1221 AsciiChar::ReverseSolidus => backslash(AsciiChar::ReverseSolidus),
1222 AsciiChar::Apostrophe => backslash(AsciiChar::Apostrophe),
1223 _ if self.to_u8().is_ascii_control() => {
1224 const HEX_DIGITS: [AsciiChar; 16] = *b"0123456789abcdef".as_ascii().unwrap();
1225
1226 let byte = self.to_u8();
1227 let hi = HEX_DIGITS[usize::from(byte >> 4)];
1228 let lo = HEX_DIGITS[usize::from(byte & 0xf)];
1229 ([Apostrophe, Backslash, AsciiChar::SmallX, hi, lo, Apostrophe], 6)
1230 }
1231 _ => ([Apostrophe, *self, Apostrophe, Null, Null, Null], 3),
1232 };
1233
1234 f.write_str(buf[..len].as_str())
1235 }
1236}