robot-rust 0.2.0

The robot-rust project, bindings for wpilib, ctre, and rev in rust.
#include "rev_helpers.hpp"
#include "rev/ConfigureTypes.h"
#include "rev/config/AbsoluteEncoderConfig.h"
#include "rev/config/AnalogSensorConfig.h"
#include "rev/config/ClosedLoopConfig.h"
#include "rev/config/EncoderConfig.h"
#include "rev/config/SparkBaseConfig.h"

namespace rev_helpers {

namespace spark {

struct SparkConfigWrapper {
    rev::spark::SparkBaseConfig config;

    public:

        SparkConfigWrapper() = default;
        SparkConfigWrapper(rev::spark::SparkBaseConfig config): config{config} {}
};

void configure(rev::spark::SparkMax &motor, SparkConfigWrapper *config, rev::ResetMode reset, rev::PersistMode persist) {
    motor.Configure(config->config, reset, persist);
}

SparkConfigWrapper* config_create() {
    return new SparkConfigWrapper();
}

void config_delete(SparkConfigWrapper *config) {
    delete config;
}

SparkConfigWrapper* config_neo() {
    return new SparkConfigWrapper(rev::spark::SparkBaseConfig::Presets::REV_NEO());
}

SparkConfigWrapper* config_neo_2() {
    return new SparkConfigWrapper(rev::spark::SparkBaseConfig::Presets::REV_NEO_2());
}

SparkConfigWrapper* config_neo_550() {
    return new SparkConfigWrapper(rev::spark::SparkBaseConfig::Presets::REV_NEO_550());
}

SparkConfigWrapper* config_vortex() {
    return new SparkConfigWrapper(rev::spark::SparkBaseConfig::Presets::REV_Vortex());
}

SparkConfigWrapper* config_ctre_minion() {
    return new SparkConfigWrapper(rev::spark::SparkBaseConfig::Presets::CTRE_Minion());
}

void apply_absolute_encoder(SparkConfigWrapper* wrapper, rev::spark::AbsoluteEncoderConfig& config) {
    wrapper->config.Apply(config);
}

void apply_analog_sensor(SparkConfigWrapper* wrapper, rev::spark::AnalogSensorConfig& config) {
    wrapper->config.Apply(config);
}

void apply_encoder(SparkConfigWrapper* wrapper, rev::spark::EncoderConfig& config) {
    wrapper->config.Apply(config);
}

void apply_closed_loop(SparkConfigWrapper* wrapper, rev::spark::ClosedLoopConfig& config) {
    wrapper->config.Apply(config);
}

void apply_inverted(SparkConfigWrapper* wrapper, bool inverted) {
    wrapper->config.Inverted(inverted);
}

void apply_idle_mode(SparkConfigWrapper* wrapper, uint32_t mode) {
    wrapper->config.SetIdleMode(rev::spark::SparkBaseConfig::IdleMode{mode});
}

}

}  // namespace rev_helpers