/*
|
|
|
|
SETTINGS MODULE
|
|
|
|
Copyright (C) 2016-2019 by Xose Pérez <xose dot perez at gmail dot com>
|
|
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <functional>
|
|
#include <utility>
|
|
#include <vector>
|
|
#include <ArduinoJson.h>
|
|
|
|
#include "libs/EmbedisWrap.h"
|
|
#include "settings_internal.h"
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
class settings_key_t {
|
|
|
|
public:
|
|
settings_key_t(const char* value, unsigned char index) :
|
|
value(value), index(index)
|
|
{}
|
|
settings_key_t(const String& value, unsigned char index) :
|
|
value(value), index(index)
|
|
{}
|
|
settings_key_t(const char* value) :
|
|
value(value), index(-1)
|
|
{}
|
|
settings_key_t(const String& value) :
|
|
value(value), index(-1)
|
|
{}
|
|
settings_key_t(const __FlashStringHelper* value) :
|
|
value(value), index(-1)
|
|
{}
|
|
|
|
String toString() const;
|
|
|
|
explicit operator String () const {
|
|
return toString();
|
|
}
|
|
|
|
private:
|
|
const String value;
|
|
int index;
|
|
};
|
|
|
|
using settings_move_key_t = std::pair<settings_key_t, settings_key_t>;
|
|
using settings_filter_t = std::function<String(String& value)>;
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
struct settings_cfg_t {
|
|
String& setting;
|
|
const char* key;
|
|
const char* default_value;
|
|
};
|
|
|
|
using settings_cfg_list_t = std::initializer_list<settings_cfg_t>;
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
void moveSetting(const String& from, const String& to);
|
|
void moveSetting(const String& from, const String& to, unsigned int index);
|
|
void moveSettings(const String& from, const String& to);
|
|
|
|
template<typename R, settings::internal::convert_t<R> Rfunc = settings::internal::convert>
|
|
R getSetting(const settings_key_t& key, R defaultValue);
|
|
|
|
String getSetting(const settings_key_t& key);
|
|
|
|
template<typename T>
|
|
bool setSetting(const settings_key_t& key, const T& value);
|
|
|
|
bool delSetting(const settings_key_t& key);
|
|
bool hasSetting(const settings_key_t& key);
|
|
|
|
void saveSettings();
|
|
void resetSettings();
|
|
|
|
void settingsGetJson(JsonObject& data);
|
|
bool settingsRestoreJson(JsonObject& data);
|
|
|
|
void settingsProcessConfig(const settings_cfg_list_t& config, settings_filter_t filter = nullptr);
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
template <typename T>
|
|
String getSetting(const String& key, unsigned char index, T defaultValue)
|
|
__attribute__((deprecated("getSetting({key, index}, default) should be used instead")));
|
|
|
|
template<typename T>
|
|
bool setSetting(const String& key, unsigned char index, T value)
|
|
__attribute__((deprecated("setSetting({key, index}, value) should be used instead")));
|
|
|
|
template<typename T>
|
|
bool hasSetting(const String& key, unsigned char index)
|
|
__attribute__((deprecated("hasSetting({key, index}) should be used instead")));
|
|
|
|
template<typename T>
|
|
bool delSetting(const String& key, unsigned char index)
|
|
__attribute__((deprecated("delSetting({key, index}) should be used instead")));
|