easy_cast/
impl_ops.rs

1// Licensed under the Apache License, Version 2.0 (the "License");
2// you may not use this file except in compliance with the License.
3// You may obtain a copy of the License in the LICENSE-APACHE file or at:
4//     https://www.apache.org/licenses/LICENSE-2.0
5
6//! `core::ops` impls for Conv.
7
8use super::*;
9use core::ops::{Range, RangeFrom, RangeInclusive, RangeTo, RangeToInclusive};
10
11impl<F, T: Conv<F>> Conv<Range<F>> for Range<T> {
12    #[inline]
13    fn try_conv(n: Range<F>) -> Result<Range<T>> {
14        Ok(Range {
15            start: n.start.try_cast()?,
16            end: n.end.try_cast()?,
17        })
18    }
19
20    #[inline]
21    fn conv(n: Range<F>) -> Range<T> {
22        Range {
23            start: n.start.cast(),
24            end: n.end.cast(),
25        }
26    }
27}
28
29impl<F: Clone, T: Conv<F>> Conv<RangeInclusive<F>> for RangeInclusive<T> {
30    #[inline]
31    fn try_conv(n: RangeInclusive<F>) -> Result<RangeInclusive<T>> {
32        let start = n.start().clone().try_cast()?;
33        let end = n.end().clone().try_cast()?;
34        Ok(RangeInclusive::new(start, end))
35    }
36
37    #[inline]
38    fn conv(n: RangeInclusive<F>) -> RangeInclusive<T> {
39        let start = n.start().clone().cast();
40        let end = n.end().clone().cast();
41        RangeInclusive::new(start, end)
42    }
43}
44
45impl<F, T: Conv<F>> Conv<RangeFrom<F>> for RangeFrom<T> {
46    #[inline]
47    fn try_conv(n: RangeFrom<F>) -> Result<RangeFrom<T>> {
48        Ok(RangeFrom {
49            start: n.start.try_cast()?,
50        })
51    }
52
53    #[inline]
54    fn conv(n: RangeFrom<F>) -> RangeFrom<T> {
55        RangeFrom {
56            start: n.start.cast(),
57        }
58    }
59}
60
61impl<F, T: Conv<F>> Conv<RangeTo<F>> for RangeTo<T> {
62    #[inline]
63    fn try_conv(n: RangeTo<F>) -> Result<RangeTo<T>> {
64        Ok(RangeTo {
65            end: n.end.try_cast()?,
66        })
67    }
68
69    #[inline]
70    fn conv(n: RangeTo<F>) -> RangeTo<T> {
71        RangeTo { end: n.end.cast() }
72    }
73}
74
75impl<F, T: Conv<F>> Conv<RangeToInclusive<F>> for RangeToInclusive<T> {
76    #[inline]
77    fn try_conv(n: RangeToInclusive<F>) -> Result<RangeToInclusive<T>> {
78        Ok(RangeToInclusive {
79            end: n.end.try_cast()?,
80        })
81    }
82
83    #[inline]
84    fn conv(n: RangeToInclusive<F>) -> RangeToInclusive<T> {
85        RangeToInclusive { end: n.end.cast() }
86    }
87}