lidar_utils/velodyne/
marker.rs1use 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}