Coverage Report

Created: 2025-07-11 06:43

/rust/registry/src/index.crates.io-6f17d22bba15001f/tap-1.0.1/src/conv.rs
Line
Count
Source
1
/*! # Method-Directed Type Conversion
2
3
The `std::convert` module provides traits for converting values from one type to
4
another. The first of these, [`From<T>`], provides an associated function
5
[`from(orig: T) -> Self`]. This function can only be called in prefix-position,
6
as it does not have a `self` receiver. The second, [`Into<T>`], provides a
7
method [`into(self) -> T`] which *can* be called in suffix-position; due to
8
intractable problems in the type solver, this method cannot have any *further*
9
method calls attached to it. It must be bound directly into a `let` or function
10
call.
11
12
The [`TryFrom<T>`] and [`TryInto<T>`] traits have the same properties, but
13
permit failure.
14
15
This module provides traits that place the conversion type parameter in the
16
method, rather than in the trait, so that users can write `.conv::<T>()` to
17
convert the preceding expression into `T`, without causing any failures in the
18
type solver. These traits are blanket-implemented on all types that have an
19
`Into<T>` implementation, which covers both the blanket implementation of `Into`
20
for types with `From`, and manual implementations of `Into`.
21
22
[`From<T>`]: https://doc.rust-lang.org/std/convert/trait.From.html
23
[`Into<T>`]: https://doc.rust-lang.org/std/convert/trait.Into.html
24
[`TryFrom<T>`]: https://doc.rust-lang.org/std/convert/trait.TryFrom.html
25
[`TryInto<T>`]: https://doc.rust-lang.org/std/convert/trait.TryInto.html
26
[`from(orig: T) -> Self`]: https://doc.rust-lang.org/std/convert/trait.From.html#tymethod.from
27
[`into(self) -> T`]: https://doc.rust-lang.org/std/convert/trait.Into.html#tymethod.into
28
!*/
29
30
use core::convert::TryInto;
31
32
/// Wraps `Into::<T>::into` as a method that can be placed in pipelines.
33
pub trait Conv
34
where
35
  Self: Sized,
36
{
37
  /// Converts `self` into `T` using `Into<T>`.
38
  ///
39
  /// # Examples
40
  ///
41
  /// ```rust
42
  /// use tap::conv::Conv;
43
  ///
44
  /// let len = "Saluton, mondo!"
45
  ///   .conv::<String>()
46
  ///   .len();
47
  /// ```
48
  #[inline(always)]
49
342k
  fn conv<T>(self) -> T
50
342k
  where
51
342k
    Self: Into<T>,
52
342k
    T: Sized,
53
342k
  {
54
342k
    Into::<T>::into(self)
55
342k
  }
Unexecuted instantiation: <&mut bitvec::slice::BitSlice<u8> as tap::conv::Conv>::conv::<bitvec::ptr::span::BitSpan<wyz::comu::Mut, u8>>
<&mut bitvec::slice::BitSlice<u8, bitvec::order::Msb0> as tap::conv::Conv>::conv::<bitvec::ptr::span::BitSpan<wyz::comu::Mut, u8, bitvec::order::Msb0>>
Line
Count
Source
49
190k
  fn conv<T>(self) -> T
50
190k
  where
51
190k
    Self: Into<T>,
52
190k
    T: Sized,
53
190k
  {
54
190k
    Into::<T>::into(self)
55
190k
  }
Unexecuted instantiation: <&bitvec::slice::BitSlice<u8> as tap::conv::Conv>::conv::<bitvec::ptr::span::BitSpan<wyz::comu::Const, u8>>
<&bitvec::slice::BitSlice<u8, bitvec::order::Msb0> as tap::conv::Conv>::conv::<bitvec::ptr::span::BitSpan<wyz::comu::Const, u8, bitvec::order::Msb0>>
Line
Count
Source
49
152k
  fn conv<T>(self) -> T
50
152k
  where
51
152k
    Self: Into<T>,
52
152k
    T: Sized,
53
152k
  {
54
152k
    Into::<T>::into(self)
55
152k
  }
56
}
57
58
impl<T> Conv for T {}
59
60
/// Wraps `TryInto::<T>::try_into` as a method that can be placed in pipelines.
61
pub trait TryConv
62
where
63
  Self: Sized,
64
{
65
  /// Attempts to convert `self` into `T` using `TryInto<T>`.
66
  ///
67
  /// # Examples
68
  ///
69
  /// ```rust
70
  /// use tap::conv::TryConv;
71
  ///
72
  /// let len = "Saluton, mondo!"
73
  ///   .try_conv::<String>()
74
  ///   .unwrap()
75
  ///   .len();
76
  /// ```
77
  #[inline(always)]
78
  fn try_conv<T>(self) -> Result<T, Self::Error>
79
  where
80
    Self: TryInto<T>,
81
    T: Sized,
82
  {
83
    TryInto::<T>::try_into(self)
84
  }
85
}
86
87
impl<T> TryConv for T {}