@@ -80,12 +80,106 @@ impl EscapeError {
80
80
}
81
81
}
82
82
83
+ /// Takes the contents of a literal (without quotes)
84
+ /// and produces a sequence of errors,
85
+ /// which are returned by invoking `error_callback`.
86
+ pub fn unescape_for_errors (
87
+ src : & str ,
88
+ mode : Mode ,
89
+ mut error_callback : impl FnMut ( Range < usize > , EscapeError ) ,
90
+ ) {
91
+ match mode {
92
+ Char => {
93
+ let mut chars = src. chars ( ) ;
94
+ if let Err ( e) = unescape_char_or_byte ( & mut chars, Mode :: Char ) {
95
+ error_callback ( 0 ..( src. len ( ) - chars. as_str ( ) . len ( ) ) , e) ;
96
+ }
97
+ }
98
+ Byte => {
99
+ let mut chars = src. chars ( ) ;
100
+ if let Err ( e) = unescape_char_or_byte ( & mut chars, Mode :: Byte ) {
101
+ error_callback ( 0 ..( src. len ( ) - chars. as_str ( ) . len ( ) ) , e) ;
102
+ }
103
+ }
104
+ Str => unescape_str ( src, |range, res| {
105
+ if let Err ( e) = res {
106
+ error_callback ( range, e) ;
107
+ }
108
+ } ) ,
109
+ ByteStr => unescape_byte_str ( src, |range, res| {
110
+ if let Err ( e) = res {
111
+ error_callback ( range, e) ;
112
+ }
113
+ } ) ,
114
+ CStr => unescape_c_str ( src, |range, res| {
115
+ if let Err ( e) = res {
116
+ error_callback ( range, e) ;
117
+ }
118
+ } ) ,
119
+ RawStr => check_raw_str ( src, |range, res| {
120
+ if let Err ( e) = res {
121
+ error_callback ( range, e) ;
122
+ }
123
+ } ) ,
124
+ RawByteStr => check_raw_byte_str ( src, |range, res| {
125
+ if let Err ( e) = res {
126
+ error_callback ( range, e) ;
127
+ }
128
+ } ) ,
129
+ RawCStr => check_raw_c_str ( src, |range, res| {
130
+ if let Err ( e) = res {
131
+ error_callback ( range, e) ;
132
+ }
133
+ } ) ,
134
+ }
135
+ }
136
+
137
+ pub fn check_raw_str ( src : & str , mut callback : impl FnMut ( Range < usize > , Result < char , EscapeError > ) ) {
138
+ unescape_unicode ( src, Mode :: RawStr , & mut callback)
139
+ }
140
+
141
+ pub fn check_raw_byte_str (
142
+ src : & str ,
143
+ mut callback : impl FnMut ( Range < usize > , Result < u8 , EscapeError > ) ,
144
+ ) {
145
+ unescape_unicode ( src, Mode :: RawByteStr , & mut |r, res| {
146
+ callback ( r, res. map ( byte_from_char) )
147
+ } )
148
+ }
149
+
150
+ pub fn check_raw_c_str (
151
+ src : & str ,
152
+ mut callback : impl FnMut ( Range < usize > , Result < char , EscapeError > ) ,
153
+ ) {
154
+ unescape_unicode ( src, Mode :: RawCStr , & mut callback)
155
+ }
156
+
157
+ pub fn unescape_str ( src : & str , mut callback : impl FnMut ( Range < usize > , Result < char , EscapeError > ) ) {
158
+ unescape_unicode ( src, Mode :: Str , & mut callback)
159
+ }
160
+
161
+ pub fn unescape_byte_str (
162
+ src : & str ,
163
+ mut callback : impl FnMut ( Range < usize > , Result < u8 , EscapeError > ) ,
164
+ ) {
165
+ unescape_unicode ( src, Mode :: ByteStr , & mut |r, res| {
166
+ callback ( r, res. map ( byte_from_char) )
167
+ } )
168
+ }
169
+
170
+ pub fn unescape_c_str (
171
+ src : & str ,
172
+ mut callback : impl FnMut ( Range < usize > , Result < MixedUnit , EscapeError > ) ,
173
+ ) {
174
+ unescape_mixed ( src, Mode :: CStr , & mut callback)
175
+ }
176
+
83
177
/// Takes the contents of a unicode-only (non-mixed-utf8) literal (without
84
178
/// quotes) and produces a sequence of escaped characters or errors.
85
179
///
86
180
/// Values are returned by invoking `callback`. For `Char` and `Byte` modes,
87
181
/// the callback will be called exactly once.
88
- pub fn unescape_unicode < F > ( src : & str , mode : Mode , callback : & mut F )
182
+ fn unescape_unicode < F > ( src : & str , mode : Mode , callback : & mut F )
89
183
where
90
184
F : FnMut ( Range < usize > , Result < char , EscapeError > ) ,
91
185
{
@@ -146,7 +240,7 @@ impl From<u8> for MixedUnit {
146
240
/// a sequence of escaped characters or errors.
147
241
///
148
242
/// Values are returned by invoking `callback`.
149
- pub fn unescape_mixed < F > ( src : & str , mode : Mode , callback : & mut F )
243
+ fn unescape_mixed < F > ( src : & str , mode : Mode , callback : & mut F )
150
244
where
151
245
F : FnMut ( Range < usize > , Result < MixedUnit , EscapeError > ) ,
152
246
{
@@ -443,7 +537,7 @@ where
443
537
}
444
538
445
539
#[ inline]
446
- pub fn byte_from_char ( c : char ) -> u8 {
540
+ fn byte_from_char ( c : char ) -> u8 {
447
541
let res = c as u32 ;
448
542
debug_assert ! ( res <= u8 :: MAX as u32 , "guaranteed because of ByteStr" ) ;
449
543
res as u8
0 commit comments