use crate::deserialization::BufferReader;
use crate::pose;
use std::io;
pub trait TrajectoryDeserializer: BufferReader {
fn read_position(&mut self) -> Result<pose::Point, io::Error>;
fn read_orientation(&mut self) -> Result<pose::Quaternion, io::Error>;
fn read_covariance(&mut self) -> Result<Vec<f64>, io::Error>;
fn read_vector(&mut self) -> Result<pose::Vector3, io::Error>;
}
pub fn parse_trajectory<D: TrajectoryDeserializer>(
mut d: D,
) -> Result<pose::PoseStamped, std::io::Error> {
let header = d.read_header()?;
let _child_frame = d.read_lp_string_aligned(8)?;
let position = d.read_position()?;
let orientation = d.read_orientation()?;
let _pose_covariance = d.read_covariance()?;
let _twist_linear = d.read_vector()?;
let _twist_angular = d.read_vector()?;
let _twist_covariance = d.read_covariance()?;
Ok(pose::PoseStamped {
header: header,
pose: pose::Pose {
position: position,
orientation: orientation,
},
})
}