use serde::{Serialize, Deserialize};
use crate::{SyncActuator, Setup};
use crate::act::parent::{ActuatorParent, RatioActuatorParent};
#[derive(Debug, Serialize, Deserialize)]
pub struct Gear<C : SyncActuator> {
pub ctrl : C,
pub ratio : f32
}
impl<C : SyncActuator> Gear<C> {
pub fn new(ctrl : C, ratio : f32) -> Self {
Self {
ctrl,
ratio
}
}
}
impl<C : SyncActuator> Setup for Gear<C> {
fn setup(&mut self) -> Result<(), crate::Error> {
self.ctrl.setup()
}
}
impl<C : SyncActuator> ActuatorParent for Gear<C> {
type Child = C;
fn child(&self) -> &Self::Child {
&self.ctrl
}
fn child_mut(&mut self) -> &mut Self::Child {
&mut self.ctrl
}
}
impl<C : SyncActuator> RatioActuatorParent for Gear<C> {
fn ratio(&self) -> f32 {
self.ratio
}
}