// Generated by scripts/gen_skill_config.py — do not edit by hand unless you know what you are doing.
#pragma once

#include <tuple>
#include <string>

#include "interfaces/action/arm.hpp"
#include "interfaces/action/camera_take_photo.hpp"
#include "interfaces/action/hand_control.hpp"
#include "interfaces/action/move_home.hpp"
#include "interfaces/action/move_leg.hpp"
#include "interfaces/action/move_waist.hpp"
#include "interfaces/action/move_wheel.hpp"
#include "interfaces/srv/map_load.hpp"
#include "interfaces/srv/map_save.hpp"
#include "interfaces/srv/vision_object_recognition.hpp"

namespace brain {

template<typename ActionT>
struct SkillActionTrait;

template<typename ServiceT>
struct SkillServiceTrait;

using SkillActionTypes = std::tuple<
  interfaces::action::Arm,
  interfaces::action::CameraTakePhoto,
  interfaces::action::HandControl,
  interfaces::action::MoveWaist,
  interfaces::action::MoveLeg,
  interfaces::action::MoveWheel,
  interfaces::action::MoveHome
>;

using SkillServiceTypes = std::tuple<
  interfaces::srv::VisionObjectRecognition,
  interfaces::srv::MapLoad,
  interfaces::srv::MapSave
>;

template<>
struct SkillActionTrait<interfaces::action::Arm>
{
  static constexpr const char * skill_name = "Arm";
  static constexpr const char * default_topic = "ArmAction";
  static bool success(const interfaces::action::Arm::Result & r) {return (r.result == 0);}
  static std::string message(const interfaces::action::Arm::Result & r) {(void)r; return "completed";}
};

template<>
struct SkillActionTrait<interfaces::action::CameraTakePhoto>
{
  static constexpr const char * skill_name = "CameraTakePhoto";
  static constexpr const char * default_topic = "";
  static bool success(const interfaces::action::CameraTakePhoto::Result & r) {return r.success;}
  static std::string message(const interfaces::action::CameraTakePhoto::Result & r) {return r.message;}
};

template<>
struct SkillActionTrait<interfaces::action::HandControl>
{
  static constexpr const char * skill_name = "HandControl";
  static constexpr const char * default_topic = "";
  static bool success(const interfaces::action::HandControl::Result & r) {return r.success;}
  static std::string message(const interfaces::action::HandControl::Result & r) {return r.message;}
};

template<>
struct SkillActionTrait<interfaces::action::MoveWaist>
{
  static constexpr const char * skill_name = "MoveWaist";
  static constexpr const char * default_topic = "";
  static bool success(const interfaces::action::MoveWaist::Result & r) {return r.success;}
  static std::string message(const interfaces::action::MoveWaist::Result & r) {return r.message;}
};

template<>
struct SkillActionTrait<interfaces::action::MoveLeg>
{
  static constexpr const char * skill_name = "MoveLeg";
  static constexpr const char * default_topic = "";
  static bool success(const interfaces::action::MoveLeg::Result & r) {return r.success;}
  static std::string message(const interfaces::action::MoveLeg::Result & r) {return r.message;}
};

template<>
struct SkillActionTrait<interfaces::action::MoveWheel>
{
  static constexpr const char * skill_name = "MoveWheel";
  static constexpr const char * default_topic = "";
  static bool success(const interfaces::action::MoveWheel::Result & r) {return r.success;}
  static std::string message(const interfaces::action::MoveWheel::Result & r) {return r.message;}
};

template<>
struct SkillActionTrait<interfaces::action::MoveHome>
{
  static constexpr const char * skill_name = "MoveHome";
  static constexpr const char * default_topic = "";
  static bool success(const interfaces::action::MoveHome::Result & r) {return r.success;}
  static std::string message(const interfaces::action::MoveHome::Result & r) {return r.message;}
};

template<>
struct SkillServiceTrait<interfaces::srv::VisionObjectRecognition>
{
  static constexpr const char * skill_name = "VisionObjectRecognition";
  static constexpr const char * default_topic = "";
};

template<>
struct SkillServiceTrait<interfaces::srv::MapLoad>
{
  static constexpr const char * skill_name = "MapLoad";
  static constexpr const char * default_topic = "";
};

template<>
struct SkillServiceTrait<interfaces::srv::MapSave>
{
  static constexpr const char * skill_name = "MapSave";
  static constexpr const char * default_topic = "";
};

} // namespace brain
