use super::v1::Syncable;
use native_db::{native_db, ToKey};
use native_model::{native_model, Model};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[native_model(id = 20, version = 1)]
#[native_db]
pub struct SensorPoseLocalV1 {
pub id: Option<i64>,
#[primary_key]
pub id_local: Option<String>,
#[secondary_key]
pub part_id: i64,
pub active_processing_modality: Option<String>,
pub active_recording_modality: Option<String>,
pub timestamp_observation: String,
pub origin_location: Option<String>,
pub origin_pitch: Option<f64>,
pub origin_heading: Option<f64>,
pub origin_roll: Option<f64>,
pub sensor_pitch: Option<f64>,
pub sensor_yaw: Option<f64>,
pub sensor_roll: Option<f64>,
pub origin_height: Option<f64>,
pub inserted_at: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[native_model(id = 20, version = 2, from = SensorPoseLocalV1)]
#[native_db]
pub struct SensorPoseLocal {
pub id: Option<i64>,
#[primary_key]
pub id_local: Option<String>,
#[secondary_key]
pub part_id: i64,
pub active_processing_modality: Option<String>,
pub active_recording_modality: Option<String>,
pub timestamp_observation: String,
pub origin_location: Option<String>,
pub origin_pitch: Option<f64>,
pub origin_heading: Option<f64>,
pub origin_roll: Option<f64>,
pub sensor_pitch: Option<f64>,
pub sensor_yaw: Option<f64>,
pub sensor_roll: Option<f64>,
pub origin_height: Option<f64>,
pub zoom: Option<f64>,
pub inserted_at: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SensorPose {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<i64>,
pub part_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub active_processing_modality: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub active_recording_modality: Option<String>,
pub timestamp_observation: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub origin_location: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub origin_pitch: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub origin_heading: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub origin_roll: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sensor_pitch: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sensor_yaw: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sensor_roll: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub origin_height: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub zoom: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub inserted_at: Option<String>,
}
impl Syncable for SensorPoseLocal {
fn id(&self) -> Option<i64> {
self.id
}
fn set_id(&mut self, id: i64) {
self.id = Some(id);
}
fn id_local(&self) -> Option<String> {
self.id_local.clone()
}
fn set_id_local(&mut self, id_local: String) {
self.id_local = Some(id_local);
}
}
impl From<SensorPoseLocalV1> for SensorPoseLocal {
fn from(previous: SensorPoseLocalV1) -> Self {
Self {
id: previous.id,
id_local: previous.id_local,
part_id: previous.part_id,
active_processing_modality: previous.active_processing_modality,
active_recording_modality: previous.active_recording_modality,
timestamp_observation: previous.timestamp_observation,
origin_location: previous.origin_location,
origin_pitch: previous.origin_pitch,
origin_heading: previous.origin_heading,
origin_roll: previous.origin_roll,
sensor_pitch: previous.sensor_pitch,
sensor_yaw: previous.sensor_yaw,
sensor_roll: previous.sensor_roll,
origin_height: previous.origin_height,
zoom: None,
inserted_at: previous.inserted_at,
}
}
}
impl From<SensorPoseLocal> for SensorPoseLocalV1 {
fn from(current: SensorPoseLocal) -> Self {
Self {
id: current.id,
id_local: current.id_local,
part_id: current.part_id,
active_processing_modality: current.active_processing_modality,
active_recording_modality: current.active_recording_modality,
timestamp_observation: current.timestamp_observation,
origin_location: current.origin_location,
origin_pitch: current.origin_pitch,
origin_heading: current.origin_heading,
origin_roll: current.origin_roll,
sensor_pitch: current.sensor_pitch,
sensor_yaw: current.sensor_yaw,
sensor_roll: current.sensor_roll,
origin_height: current.origin_height,
inserted_at: current.inserted_at,
}
}
}
impl From<SensorPoseLocal> for SensorPose {
fn from(local: SensorPoseLocal) -> Self {
Self {
id: local.id,
part_id: local.part_id,
active_processing_modality: local.active_processing_modality,
active_recording_modality: local.active_recording_modality,
timestamp_observation: local.timestamp_observation,
origin_location: local.origin_location,
origin_pitch: local.origin_pitch,
origin_heading: local.origin_heading,
origin_roll: local.origin_roll,
sensor_pitch: local.sensor_pitch,
sensor_yaw: local.sensor_yaw,
sensor_roll: local.sensor_roll,
origin_height: local.origin_height,
zoom: local.zoom,
inserted_at: local.inserted_at,
}
}
}
impl From<SensorPose> for SensorPoseLocal {
fn from(remote: SensorPose) -> Self {
Self {
id: remote.id,
id_local: None,
part_id: remote.part_id,
active_processing_modality: remote.active_processing_modality,
active_recording_modality: remote.active_recording_modality,
timestamp_observation: remote.timestamp_observation,
origin_location: remote.origin_location,
origin_pitch: remote.origin_pitch,
origin_heading: remote.origin_heading,
origin_roll: remote.origin_roll,
sensor_pitch: remote.sensor_pitch,
sensor_yaw: remote.sensor_yaw,
sensor_roll: remote.sensor_roll,
origin_height: remote.origin_height,
zoom: remote.zoom,
inserted_at: remote.inserted_at,
}
}
}