robot-rust 0.2.1

The robot-rust project, bindings for wpilib, ctre, and rev in rust.
use autocxx::WithinUniquePtr;
use autocxx::c_int;

use crate::ffi;

pub struct XboxController {
    cont: cxx::UniquePtr<ffi::XboxController>,
}

impl XboxController {
    pub fn new(port: i32) -> Self {
        Self {
            cont: ffi::XboxController::new(c_int(port)).within_unique_ptr(),
        }
    }

    pub fn left_x(&self) -> f64 {
        self.cont.GetLeftX()
    }

    pub fn right_x(&self) -> f64 {
        self.cont.GetRightX()
    }

    pub fn left_y(&self) -> f64 {
        self.cont.GetLeftY()
    }

    pub fn right_y(&self) -> f64 {
        self.cont.GetRightY()
    }

    pub fn left_trigger(&self) -> f64 {
        self.cont.GetLeftTriggerAxis()
    }

    pub fn right_trigger(&self) -> f64 {
        self.cont.GetRightTriggerAxis()
    }

    pub fn a(&self) -> bool {
        self.cont.GetAButton()
    }

    pub fn a_pressed(&mut self) -> bool {
        self.cont.pin_mut().GetAButtonPressed()
    }

    pub fn a_released(&mut self) -> bool {
        self.cont.pin_mut().GetAButtonReleased()
    }

    pub fn b(&self) -> bool {
        self.cont.GetBButton()
    }

    pub fn b_pressed(&mut self) -> bool {
        self.cont.pin_mut().GetBButtonPressed()
    }

    pub fn b_released(&mut self) -> bool {
        self.cont.pin_mut().GetBButtonReleased()
    }

    pub fn x(&self) -> bool {
        self.cont.GetXButton()
    }

    pub fn x_pressed(&mut self) -> bool {
        self.cont.pin_mut().GetXButtonPressed()
    }

    pub fn x_released(&mut self) -> bool {
        self.cont.pin_mut().GetXButtonReleased()
    }

    pub fn y(&self) -> bool {
        self.cont.GetYButton()
    }

    pub fn y_pressed(&mut self) -> bool {
        self.cont.pin_mut().GetYButtonPressed()
    }

    pub fn y_released(&mut self) -> bool {
        self.cont.pin_mut().GetYButtonReleased()
    }

    pub fn left_bumper(&self) -> bool {
        self.cont.GetLeftBumperButton()
    }

    pub fn left_bumper_pressed(&mut self) -> bool {
        self.cont.pin_mut().GetLeftBumperButtonPressed()
    }

    pub fn left_bumper_released(&mut self) -> bool {
        self.cont.pin_mut().GetLeftBumperButtonReleased()
    }

    pub fn right_bumper(&self) -> bool {
        self.cont.GetRightBumperButton()
    }

    pub fn right_bumper_pressed(&mut self) -> bool {
        self.cont.pin_mut().GetRightBumperButtonPressed()
    }

    pub fn right_bumper_released(&mut self) -> bool {
        self.cont.pin_mut().GetRightBumperButtonReleased()
    }

    pub fn back(&self) -> bool {
        self.cont.GetBackButton()
    }

    pub fn back_pressed(&mut self) -> bool {
        self.cont.pin_mut().GetBackButtonPressed()
    }

    pub fn back_released(&mut self) -> bool {
        self.cont.pin_mut().GetBackButtonReleased()
    }

    pub fn start(&self) -> bool {
        self.cont.GetStartButton()
    }

    pub fn start_pressed(&mut self) -> bool {
        self.cont.pin_mut().GetStartButtonPressed()
    }

    pub fn start_released(&mut self) -> bool {
        self.cont.pin_mut().GetStartButtonReleased()
    }

    pub fn left_stick(&self) -> bool {
        self.cont.GetLeftStickButton()
    }

    pub fn left_stick_pressed(&mut self) -> bool {
        self.cont.pin_mut().GetLeftStickButtonPressed()
    }

    pub fn left_stick_released(&mut self) -> bool {
        self.cont.pin_mut().GetLeftStickButtonReleased()
    }

    pub fn right_stick(&self) -> bool {
        self.cont.GetRightStickButton()
    }

    pub fn right_stick_pressed(&mut self) -> bool {
        self.cont.pin_mut().GetRightStickButtonPressed()
    }

    pub fn right_stick_released(&mut self) -> bool {
        self.cont.pin_mut().GetRightStickButtonReleased()
    }
}