1use 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}