svg/node/element/path/
parameters.rs1use std::ops::Deref;
2
3use super::Number;
4
5#[derive(Clone, Debug)]
7pub struct Parameters(Vec<Number>);
8
9impl Deref for Parameters {
10 type Target = [Number];
11
12 #[inline]
13 fn deref(&self) -> &Self::Target {
14 &self.0
15 }
16}
17
18impl From<Parameters> for String {
19 fn from(Parameters(inner): Parameters) -> Self {
20 inner
21 .iter()
22 .map(|value| value.to_string())
23 .collect::<Vec<_>>()
24 .join(",")
25 }
26}
27
28impl From<Vec<Number>> for Parameters {
29 #[inline]
30 fn from(inner: Vec<Number>) -> Self {
31 Parameters(inner)
32 }
33}
34
35impl From<Parameters> for Vec<Number> {
36 #[inline]
37 fn from(Parameters(inner): Parameters) -> Self {
38 inner
39 }
40}
41
42impl<'l> From<&'l mut Parameters> for &'l mut Vec<Number> {
43 #[inline]
44 fn from(Parameters(inner): &'l mut Parameters) -> Self {
45 inner
46 }
47}
48
49macro_rules! implement {
50 ($($primitive:ty,)*) => (
51 $(impl From<$primitive> for Parameters {
52 #[inline]
53 fn from(inner: $primitive) -> Self {
54 Parameters(vec![inner as Number])
55 }
56 })*
57 );
58}
59
60implement! {
61 i8, i16, i32, i64, isize,
62 u8, u16, u32, u64, usize,
63 f32, f64,
64}
65
66macro_rules! implement {
67 (@express $e:expr) => ($e);
68 ($(($t:ident, $n:tt)),*) => (
69 impl<$($t),*> From<($($t),*)> for Parameters
70 where
71 $($t: Into<Parameters>),*
72 {
73 fn from(inner: ($($t),*)) -> Self {
74 let mut result = vec![];
75 $(result.append(&mut implement!(@express inner.$n).into().into());)*
76 Parameters(result)
77 }
78 }
79 );
80}
81
82implement! { (T0, 0), (T1, 1) }
83implement! { (T0, 0), (T1, 1), (T2, 2) }
84implement! { (T0, 0), (T1, 1), (T2, 2), (T3, 3) }
85implement! { (T0, 0), (T1, 1), (T2, 2), (T3, 3), (T4, 4) }
86implement! { (T0, 0), (T1, 1), (T2, 2), (T3, 3), (T4, 4), (T5, 5) }
87implement! { (T0, 0), (T1, 1), (T2, 2), (T3, 3), (T4, 4), (T5, 5), (T6, 6) }
88implement! { (T0, 0), (T1, 1), (T2, 2), (T3, 3), (T4, 4), (T5, 5), (T6, 6), (T7, 7) }