nuscenes_data/serializable/
types.rs

1use super::serde_utils;
2use crate::{
3    serializable::{Token, VisibilityToken},
4    utils::WithToken,
5};
6use chrono::naive::{NaiveDate, NaiveDateTime};
7use serde::{Deserialize, Serialize};
8use std::path::PathBuf;
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct Attribute {
12    pub token: Token,
13    pub description: String,
14    pub name: String,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct CalibratedSensor {
19    pub token: Token,
20    pub sensor_token: Token,
21    pub rotation: [f64; 4],
22    #[serde(with = "serde_utils::camera_intrinsic")]
23    pub camera_intrinsic: Option<[[f64; 3]; 3]>,
24    pub translation: [f64; 3],
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
28pub struct Category {
29    pub token: Token,
30    pub description: String,
31    pub name: String,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct EgoPose {
36    pub token: Token,
37    #[serde(with = "serde_utils::timestamp")]
38    pub timestamp: NaiveDateTime,
39    pub rotation: [f64; 4],
40    pub translation: [f64; 3],
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct Instance {
45    pub token: Token,
46    pub nbr_annotations: usize,
47    pub category_token: Token,
48    pub first_annotation_token: Token,
49    pub last_annotation_token: Token,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
53pub struct Log {
54    pub token: Token,
55    pub date_captured: NaiveDate,
56    pub location: String,
57    pub vehicle: String,
58    #[serde(with = "serde_utils::logfile")]
59    pub logfile: Option<PathBuf>,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
63pub struct Map {
64    pub token: Token,
65    pub log_tokens: Vec<Token>,
66    pub filename: PathBuf,
67    pub category: String,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize)]
71pub struct Sample {
72    pub token: Token,
73    #[serde(with = "serde_utils::opt_token")]
74    pub next: Option<Token>,
75    #[serde(with = "serde_utils::opt_token")]
76    pub prev: Option<Token>,
77    pub scene_token: Token,
78    #[serde(with = "serde_utils::timestamp")]
79    pub timestamp: NaiveDateTime,
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct SampleAnnotation {
84    pub token: Token,
85    pub num_lidar_pts: isize,
86    pub num_radar_pts: isize,
87    pub size: [f64; 3],
88    pub rotation: [f64; 4],
89    pub translation: [f64; 3],
90    pub sample_token: Token,
91    pub instance_token: Token,
92    pub attribute_tokens: Vec<Token>,
93    pub visibility_token: Option<VisibilityToken>,
94    #[serde(with = "serde_utils::opt_token")]
95    pub prev: Option<Token>,
96    #[serde(with = "serde_utils::opt_token")]
97    pub next: Option<Token>,
98}
99
100#[derive(Debug, Clone, Serialize, Deserialize)]
101pub struct SampleData {
102    pub token: Token,
103    pub fileformat: FileFormat,
104    pub is_key_frame: bool,
105    pub filename: PathBuf,
106    #[serde(with = "serde_utils::timestamp")]
107    pub timestamp: NaiveDateTime,
108    pub sample_token: Token,
109    pub ego_pose_token: Token,
110    pub calibrated_sensor_token: Token,
111    #[serde(with = "serde_utils::opt_token")]
112    pub prev: Option<Token>,
113    #[serde(with = "serde_utils::opt_token")]
114    pub next: Option<Token>,
115}
116
117#[derive(Debug, Clone, Serialize, Deserialize)]
118pub struct Scene {
119    pub token: Token,
120    pub name: String,
121    pub description: String,
122    pub log_token: Token,
123    pub nbr_samples: usize,
124    pub first_sample_token: Token,
125    pub last_sample_token: Token,
126}
127
128#[derive(Debug, Clone, Serialize, Deserialize)]
129pub struct Sensor {
130    pub token: Token,
131    pub modality: Modality,
132    pub channel: Channel,
133}
134
135#[derive(Debug, Clone, Serialize, Deserialize)]
136pub struct Visibility {
137    pub token: VisibilityToken,
138    pub level: VisibilityLevel,
139    pub description: String,
140}
141
142#[derive(Debug, Clone, Serialize, Deserialize, Copy, PartialEq, Eq, Hash)]
143#[serde(rename_all = "lowercase")]
144pub enum Modality {
145    Camera,
146    Lidar,
147    Radar,
148}
149
150#[derive(Debug, Clone, Serialize, Deserialize, Copy, PartialEq, Eq, Hash)]
151#[serde(rename_all = "lowercase")]
152pub enum FileFormat {
153    Pcd,
154    Jpg,
155}
156
157#[derive(Debug, Clone, Serialize, Deserialize, Copy, PartialEq, Eq, Hash)]
158#[serde(rename_all = "kebab-case")]
159pub enum VisibilityLevel {
160    V0_40,
161    V40_60,
162    V60_80,
163    V80_100,
164}
165
166#[derive(Debug, Clone, Serialize, Deserialize, Copy, PartialEq, Eq, Hash)]
167#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
168pub enum Channel {
169    CamBack,
170    CamBackLeft,
171    CamBackRight,
172    CamFront,
173    CamFrontLeft,
174    CamFrontRight,
175    CamFrontZoomed,
176    LidarTop,
177    RadarFront,
178    RadarFrontLeft,
179    RadarFrontRight,
180    RadarBackLeft,
181    RadarBackRight,
182}
183
184macro_rules! impl_with_token {
185    ($name:path) => {
186        impl WithToken for $name {
187            fn token(&self) -> Token {
188                self.token
189            }
190        }
191    };
192}
193
194impl_with_token!(Attribute);
195impl_with_token!(CalibratedSensor);
196impl_with_token!(Category);
197impl_with_token!(EgoPose);
198impl_with_token!(Instance);
199impl_with_token!(Log);
200impl_with_token!(Map);
201impl_with_token!(Sample);
202impl_with_token!(SampleAnnotation);
203impl_with_token!(SampleData);
204impl_with_token!(Scene);
205impl_with_token!(Sensor);