3#include "../SinricProRequest.h" 
    4#include "../SinricProStrings.h" 
    6#include "../SinricProNamespace.h" 
    7namespace SINRICPRO_NAMESPACE {
 
    9using SetSettingCallback = std::function<bool(
const String&, 
const String&, String&)>;
 
   11FSTR(SETTING, setSetting);     
 
   16class SettingController {
 
   19    void onSetSetting(SetSettingCallback cb);
 
   22    bool handleSettingController(SinricProRequest &request);
 
   25    SetSettingCallback setSettingCallback;
 
   29SettingController<T>::SettingController() { 
 
   30  T* device = 
static_cast<T*
>(
this);
 
   31  device->registerRequestHandler(std::bind(&SettingController<T>::handleSettingController, 
this, std::placeholders::_1)); 
 
   35void SettingController<T>::onSetSetting(SetSettingCallback cb) {
 
   36  setSettingCallback = cb;
 
   40bool SettingController<T>::handleSettingController(SinricProRequest &request) {
 
   41  T* device = 
static_cast<T*
>(
this);
 
   45  if (setSettingCallback && request.action == FSTR_SETTING_setSetting) {
 
   46    String settingId    = request.request_value[FSTR_SETTING_id] | 
"";
 
   47    String settingValue = request.request_value[FSTR_SETTING_value] | 
"";
 
   48    success = setSettingCallback(device->deviceId, settingId, settingValue);
 
   49    request.response_value[FSTR_SETTING_id]    = settingId;
 
   50    request.response_value[FSTR_SETTING_value] = settingValue;
 
   60using SettingController = SINRICPRO_NAMESPACE::SettingController<T>;