#traits #arguments #try-into #call #self

to_trait

A trait with methods similar to .into() and .try_into(), except they take type arguments

2 releases

0.1.1 Apr 2, 2020
0.1.0 Apr 2, 2020

#5 in #try-into

Download history 157/week @ 2024-11-23 206/week @ 2024-11-30 521/week @ 2024-12-07 166/week @ 2024-12-14 70/week @ 2024-12-21 107/week @ 2024-12-28 80/week @ 2025-01-04 129/week @ 2025-01-11 101/week @ 2025-01-18 143/week @ 2025-01-25 342/week @ 2025-02-01 342/week @ 2025-02-08 179/week @ 2025-02-15 186/week @ 2025-02-22 164/week @ 2025-03-01 170/week @ 2025-03-08

743 downloads per month

MIT license

4KB

to_trait

Provides the To trait, which provides methods similar to .into() and .try_into(), except they take type arguments. The trait looks like this:

trait To {
    fn to<T>(self) -> T where Self: Into<T>;
    fn try_to<T>(self) -> Result<T, Self::Error> where Self: TryInto<T>;
}

and you use it like this:

use to_trait::To;
let five_u64 = 5u32.to::<u64>();
let five_u8 = 5u32.to::<u8>().unwrap();

At first glance, this might not seem very useful, but sometimes the compiler can't infer the output type of a call to .into(). This happens a lot with method chains, e.g. if you call .into().some_other_method(), and it can be pretty annoying.

What woud be ideal is if we could write the desired output type as type arguments to the method. Unfortunately, because Into<T> takes T as a trait type parameter, we can't supply it when calling the method - the only way to supply the type arguments is by falling back to universal function call syntax, with Into::<T>::into(..).

The methods on To trait essentially act as type inference helpers, letting you supply the type arguments while still using method call syntax. As a bonus, they are shorter by two characters 😄

License

MIT

No runtime deps