|
1 | 1 | //! The `ByteStr` type and trait implementations. |
2 | 2 |
|
| 3 | +mod traits; |
| 4 | + |
| 5 | +#[unstable(feature = "bstr_internals", issue = "none")] |
| 6 | +pub use traits::{impl_partial_eq, impl_partial_eq_n, impl_partial_eq_ord}; |
| 7 | + |
3 | 8 | use crate::borrow::{Borrow, BorrowMut}; |
4 | | -use crate::cmp::Ordering; |
5 | | -use crate::ops::{ |
6 | | - Deref, DerefMut, DerefPure, Index, IndexMut, Range, RangeFrom, RangeFull, RangeInclusive, |
7 | | - RangeTo, RangeToInclusive, |
8 | | -}; |
9 | | -use crate::{fmt, hash}; |
| 9 | +use crate::fmt; |
| 10 | +use crate::ops::{Deref, DerefMut, DerefPure}; |
10 | 11 |
|
11 | 12 | /// A wrapper for `&[u8]` representing a human-readable string that's conventionally, but not |
12 | 13 | /// always, UTF-8. |
@@ -91,6 +92,13 @@ impl ByteStr { |
91 | 92 | pub fn as_bytes(&self) -> &[u8] { |
92 | 93 | &self.0 |
93 | 94 | } |
| 95 | + |
| 96 | + #[doc(hidden)] |
| 97 | + #[unstable(feature = "bstr_internals", issue = "none")] |
| 98 | + #[inline] |
| 99 | + pub fn as_bytes_mut(&mut self) -> &mut [u8] { |
| 100 | + &mut self.0 |
| 101 | + } |
94 | 102 | } |
95 | 103 |
|
96 | 104 | #[unstable(feature = "bstr", issue = "134915")] |
@@ -295,273 +303,6 @@ impl<'a> Default for &'a mut ByteStr { |
295 | 303 | // } |
296 | 304 | // } |
297 | 305 |
|
298 | | -#[unstable(feature = "bstr", issue = "134915")] |
299 | | -impl hash::Hash for ByteStr { |
300 | | - #[inline] |
301 | | - fn hash<H: hash::Hasher>(&self, state: &mut H) { |
302 | | - self.0.hash(state); |
303 | | - } |
304 | | -} |
305 | | - |
306 | | -#[unstable(feature = "bstr", issue = "134915")] |
307 | | -impl Index<usize> for ByteStr { |
308 | | - type Output = u8; |
309 | | - |
310 | | - #[inline] |
311 | | - fn index(&self, idx: usize) -> &u8 { |
312 | | - &self.0[idx] |
313 | | - } |
314 | | -} |
315 | | - |
316 | | -#[unstable(feature = "bstr", issue = "134915")] |
317 | | -impl Index<RangeFull> for ByteStr { |
318 | | - type Output = ByteStr; |
319 | | - |
320 | | - #[inline] |
321 | | - fn index(&self, _: RangeFull) -> &ByteStr { |
322 | | - self |
323 | | - } |
324 | | -} |
325 | | - |
326 | | -#[unstable(feature = "bstr", issue = "134915")] |
327 | | -impl Index<Range<usize>> for ByteStr { |
328 | | - type Output = ByteStr; |
329 | | - |
330 | | - #[inline] |
331 | | - fn index(&self, r: Range<usize>) -> &ByteStr { |
332 | | - ByteStr::from_bytes(&self.0[r]) |
333 | | - } |
334 | | -} |
335 | | - |
336 | | -#[unstable(feature = "bstr", issue = "134915")] |
337 | | -impl Index<RangeInclusive<usize>> for ByteStr { |
338 | | - type Output = ByteStr; |
339 | | - |
340 | | - #[inline] |
341 | | - fn index(&self, r: RangeInclusive<usize>) -> &ByteStr { |
342 | | - ByteStr::from_bytes(&self.0[r]) |
343 | | - } |
344 | | -} |
345 | | - |
346 | | -#[unstable(feature = "bstr", issue = "134915")] |
347 | | -impl Index<RangeFrom<usize>> for ByteStr { |
348 | | - type Output = ByteStr; |
349 | | - |
350 | | - #[inline] |
351 | | - fn index(&self, r: RangeFrom<usize>) -> &ByteStr { |
352 | | - ByteStr::from_bytes(&self.0[r]) |
353 | | - } |
354 | | -} |
355 | | - |
356 | | -#[unstable(feature = "bstr", issue = "134915")] |
357 | | -impl Index<RangeTo<usize>> for ByteStr { |
358 | | - type Output = ByteStr; |
359 | | - |
360 | | - #[inline] |
361 | | - fn index(&self, r: RangeTo<usize>) -> &ByteStr { |
362 | | - ByteStr::from_bytes(&self.0[r]) |
363 | | - } |
364 | | -} |
365 | | - |
366 | | -#[unstable(feature = "bstr", issue = "134915")] |
367 | | -impl Index<RangeToInclusive<usize>> for ByteStr { |
368 | | - type Output = ByteStr; |
369 | | - |
370 | | - #[inline] |
371 | | - fn index(&self, r: RangeToInclusive<usize>) -> &ByteStr { |
372 | | - ByteStr::from_bytes(&self.0[r]) |
373 | | - } |
374 | | -} |
375 | | - |
376 | | -#[unstable(feature = "bstr", issue = "134915")] |
377 | | -impl IndexMut<usize> for ByteStr { |
378 | | - #[inline] |
379 | | - fn index_mut(&mut self, idx: usize) -> &mut u8 { |
380 | | - &mut self.0[idx] |
381 | | - } |
382 | | -} |
383 | | - |
384 | | -#[unstable(feature = "bstr", issue = "134915")] |
385 | | -impl IndexMut<RangeFull> for ByteStr { |
386 | | - #[inline] |
387 | | - fn index_mut(&mut self, _: RangeFull) -> &mut ByteStr { |
388 | | - self |
389 | | - } |
390 | | -} |
391 | | - |
392 | | -#[unstable(feature = "bstr", issue = "134915")] |
393 | | -impl IndexMut<Range<usize>> for ByteStr { |
394 | | - #[inline] |
395 | | - fn index_mut(&mut self, r: Range<usize>) -> &mut ByteStr { |
396 | | - ByteStr::from_bytes_mut(&mut self.0[r]) |
397 | | - } |
398 | | -} |
399 | | - |
400 | | -#[unstable(feature = "bstr", issue = "134915")] |
401 | | -impl IndexMut<RangeInclusive<usize>> for ByteStr { |
402 | | - #[inline] |
403 | | - fn index_mut(&mut self, r: RangeInclusive<usize>) -> &mut ByteStr { |
404 | | - ByteStr::from_bytes_mut(&mut self.0[r]) |
405 | | - } |
406 | | -} |
407 | | - |
408 | | -#[unstable(feature = "bstr", issue = "134915")] |
409 | | -impl IndexMut<RangeFrom<usize>> for ByteStr { |
410 | | - #[inline] |
411 | | - fn index_mut(&mut self, r: RangeFrom<usize>) -> &mut ByteStr { |
412 | | - ByteStr::from_bytes_mut(&mut self.0[r]) |
413 | | - } |
414 | | -} |
415 | | - |
416 | | -#[unstable(feature = "bstr", issue = "134915")] |
417 | | -impl IndexMut<RangeTo<usize>> for ByteStr { |
418 | | - #[inline] |
419 | | - fn index_mut(&mut self, r: RangeTo<usize>) -> &mut ByteStr { |
420 | | - ByteStr::from_bytes_mut(&mut self.0[r]) |
421 | | - } |
422 | | -} |
423 | | - |
424 | | -#[unstable(feature = "bstr", issue = "134915")] |
425 | | -impl IndexMut<RangeToInclusive<usize>> for ByteStr { |
426 | | - #[inline] |
427 | | - fn index_mut(&mut self, r: RangeToInclusive<usize>) -> &mut ByteStr { |
428 | | - ByteStr::from_bytes_mut(&mut self.0[r]) |
429 | | - } |
430 | | -} |
431 | | - |
432 | | -#[unstable(feature = "bstr", issue = "134915")] |
433 | | -impl Eq for ByteStr {} |
434 | | - |
435 | | -#[unstable(feature = "bstr", issue = "134915")] |
436 | | -impl PartialEq<ByteStr> for ByteStr { |
437 | | - #[inline] |
438 | | - fn eq(&self, other: &ByteStr) -> bool { |
439 | | - &self.0 == &other.0 |
440 | | - } |
441 | | -} |
442 | | - |
443 | | -#[doc(hidden)] |
444 | | -#[macro_export] |
445 | | -#[unstable(feature = "bstr_internals", issue = "none")] |
446 | | -macro_rules! impl_partial_eq { |
447 | | - ($lhs:ty, $rhs:ty) => { |
448 | | - #[allow(unused_lifetimes)] |
449 | | - impl<'a> PartialEq<$rhs> for $lhs { |
450 | | - #[inline] |
451 | | - fn eq(&self, other: &$rhs) -> bool { |
452 | | - let other: &[u8] = other.as_ref(); |
453 | | - PartialEq::eq(self.as_bytes(), other) |
454 | | - } |
455 | | - } |
456 | | - |
457 | | - #[allow(unused_lifetimes)] |
458 | | - impl<'a> PartialEq<$lhs> for $rhs { |
459 | | - #[inline] |
460 | | - fn eq(&self, other: &$lhs) -> bool { |
461 | | - let this: &[u8] = self.as_ref(); |
462 | | - PartialEq::eq(this, other.as_bytes()) |
463 | | - } |
464 | | - } |
465 | | - }; |
466 | | -} |
467 | | - |
468 | | -#[doc(hidden)] |
469 | | -#[unstable(feature = "bstr_internals", issue = "none")] |
470 | | -pub use impl_partial_eq; |
471 | | - |
472 | | -#[doc(hidden)] |
473 | | -#[macro_export] |
474 | | -#[unstable(feature = "bstr_internals", issue = "none")] |
475 | | -macro_rules! impl_partial_eq_ord { |
476 | | - ($lhs:ty, $rhs:ty) => { |
477 | | - $crate::bstr::impl_partial_eq!($lhs, $rhs); |
478 | | - |
479 | | - #[allow(unused_lifetimes)] |
480 | | - #[unstable(feature = "bstr", issue = "134915")] |
481 | | - impl<'a> PartialOrd<$rhs> for $lhs { |
482 | | - #[inline] |
483 | | - fn partial_cmp(&self, other: &$rhs) -> Option<Ordering> { |
484 | | - let other: &[u8] = other.as_ref(); |
485 | | - PartialOrd::partial_cmp(self.as_bytes(), other) |
486 | | - } |
487 | | - } |
488 | | - |
489 | | - #[allow(unused_lifetimes)] |
490 | | - #[unstable(feature = "bstr", issue = "134915")] |
491 | | - impl<'a> PartialOrd<$lhs> for $rhs { |
492 | | - #[inline] |
493 | | - fn partial_cmp(&self, other: &$lhs) -> Option<Ordering> { |
494 | | - let this: &[u8] = self.as_ref(); |
495 | | - PartialOrd::partial_cmp(this, other.as_bytes()) |
496 | | - } |
497 | | - } |
498 | | - }; |
499 | | -} |
500 | | - |
501 | | -#[doc(hidden)] |
502 | | -#[unstable(feature = "bstr_internals", issue = "none")] |
503 | | -pub use impl_partial_eq_ord; |
504 | | - |
505 | | -#[doc(hidden)] |
506 | | -#[macro_export] |
507 | | -#[unstable(feature = "bstr_internals", issue = "none")] |
508 | | -macro_rules! impl_partial_eq_n { |
509 | | - ($lhs:ty, $rhs:ty) => { |
510 | | - #[allow(unused_lifetimes)] |
511 | | - #[unstable(feature = "bstr", issue = "134915")] |
512 | | - impl<const N: usize> PartialEq<$rhs> for $lhs { |
513 | | - #[inline] |
514 | | - fn eq(&self, other: &$rhs) -> bool { |
515 | | - let other: &[u8] = other.as_ref(); |
516 | | - PartialEq::eq(self.as_bytes(), other) |
517 | | - } |
518 | | - } |
519 | | - |
520 | | - #[allow(unused_lifetimes)] |
521 | | - #[unstable(feature = "bstr", issue = "134915")] |
522 | | - impl<const N: usize> PartialEq<$lhs> for $rhs { |
523 | | - #[inline] |
524 | | - fn eq(&self, other: &$lhs) -> bool { |
525 | | - let this: &[u8] = self.as_ref(); |
526 | | - PartialEq::eq(this, other.as_bytes()) |
527 | | - } |
528 | | - } |
529 | | - }; |
530 | | -} |
531 | | - |
532 | | -#[doc(hidden)] |
533 | | -#[unstable(feature = "bstr_internals", issue = "none")] |
534 | | -pub use impl_partial_eq_n; |
535 | | - |
536 | | -// PartialOrd with `[u8]` omitted to avoid inference failures |
537 | | -impl_partial_eq!(ByteStr, [u8]); |
538 | | -// PartialOrd with `&[u8]` omitted to avoid inference failures |
539 | | -impl_partial_eq!(ByteStr, &[u8]); |
540 | | -// PartialOrd with `str` omitted to avoid inference failures |
541 | | -impl_partial_eq!(ByteStr, str); |
542 | | -// PartialOrd with `&str` omitted to avoid inference failures |
543 | | -impl_partial_eq!(ByteStr, &str); |
544 | | -// PartialOrd with `[u8; N]` omitted to avoid inference failures |
545 | | -impl_partial_eq_n!(ByteStr, [u8; N]); |
546 | | -// PartialOrd with `[u8; N]` omitted to avoid inference failures |
547 | | -impl_partial_eq_n!(ByteStr, &[u8; N]); |
548 | | - |
549 | | -#[unstable(feature = "bstr", issue = "134915")] |
550 | | -impl Ord for ByteStr { |
551 | | - #[inline] |
552 | | - fn cmp(&self, other: &ByteStr) -> Ordering { |
553 | | - Ord::cmp(&self.0, &other.0) |
554 | | - } |
555 | | -} |
556 | | - |
557 | | -#[unstable(feature = "bstr", issue = "134915")] |
558 | | -impl PartialOrd for ByteStr { |
559 | | - #[inline] |
560 | | - fn partial_cmp(&self, other: &ByteStr) -> Option<Ordering> { |
561 | | - PartialOrd::partial_cmp(&self.0, &other.0) |
562 | | - } |
563 | | -} |
564 | | - |
565 | 306 | #[unstable(feature = "bstr", issue = "134915")] |
566 | 307 | impl<'a> TryFrom<&'a ByteStr> for &'a str { |
567 | 308 | type Error = crate::str::Utf8Error; |
|
0 commit comments