lidar_utils/velodyne/
marker.rs

1//! Marker traits and types that are mainly used by config types.
2
3use super::{config::LaserParameter, packet::ReturnMode};
4use crate::common::*;
5
6pub use model::*;
7pub use return_type::*;
8
9mod return_type {
10    use super::*;
11
12    pub trait ReturnTypeMarker
13    where
14        Self: Debug + Clone,
15    {
16        fn into_dynamic(self) -> DynamicReturn;
17    }
18
19    #[derive(Debug, Clone, Copy)]
20    pub struct StrongestReturn;
21
22    impl ReturnTypeMarker for StrongestReturn {
23        fn into_dynamic(self) -> DynamicReturn {
24            DynamicReturn::StrongestReturn
25        }
26    }
27
28    #[derive(Debug, Clone, Copy)]
29    pub struct LastReturn;
30
31    impl ReturnTypeMarker for LastReturn {
32        fn into_dynamic(self) -> DynamicReturn {
33            DynamicReturn::LastReturn
34        }
35    }
36
37    #[derive(Debug, Clone, Copy)]
38    pub struct DualReturn;
39
40    impl ReturnTypeMarker for DualReturn {
41        fn into_dynamic(self) -> DynamicReturn {
42            DynamicReturn::DualReturn
43        }
44    }
45
46    #[derive(Debug, Clone, Copy)]
47    pub enum DynamicReturn {
48        LastReturn,
49        DualReturn,
50        StrongestReturn,
51    }
52
53    impl ReturnTypeMarker for DynamicReturn {
54        fn into_dynamic(self) -> DynamicReturn {
55            self
56        }
57    }
58
59    impl From<ReturnMode> for DynamicReturn {
60        fn from(mode: ReturnMode) -> DynamicReturn {
61            match mode {
62                ReturnMode::LastReturn => DynamicReturn::LastReturn,
63                ReturnMode::StrongestReturn => DynamicReturn::StrongestReturn,
64                ReturnMode::DualReturn => DynamicReturn::DualReturn,
65            }
66        }
67    }
68}
69
70mod model {
71    pub use super::*;
72
73    pub trait ModelMarker {
74        type ParamArray;
75
76        fn into_dynamic(self) -> DynamicModel;
77        fn to_dynamic_params(params: Self::ParamArray) -> Vec<LaserParameter>;
78    }
79
80    #[derive(Debug, Clone, Copy)]
81    pub struct Vlp16;
82
83    impl ModelMarker for Vlp16 {
84        type ParamArray = [LaserParameter; 16];
85
86        fn into_dynamic(self) -> DynamicModel {
87            DynamicModel::Vlp16
88        }
89
90        fn to_dynamic_params(params: Self::ParamArray) -> Vec<LaserParameter> {
91            params.into()
92        }
93    }
94
95    #[derive(Debug, Clone, Copy)]
96    pub struct Vlp32;
97
98    impl ModelMarker for Vlp32 {
99        type ParamArray = [LaserParameter; 32];
100
101        fn into_dynamic(self) -> DynamicModel {
102            DynamicModel::Vlp32
103        }
104
105        fn to_dynamic_params(params: Self::ParamArray) -> Vec<LaserParameter> {
106            params.into()
107        }
108    }
109
110    #[derive(Debug, Clone, Copy)]
111    pub enum DynamicModel {
112        Vlp16,
113        Vlp32,
114    }
115
116    impl ModelMarker for DynamicModel {
117        type ParamArray = Vec<LaserParameter>;
118
119        fn into_dynamic(self) -> DynamicModel {
120            self
121        }
122
123        fn to_dynamic_params(params: Self::ParamArray) -> Vec<LaserParameter> {
124            params
125        }
126    }
127}