JsonConfig: refactor JSON key handling to improve safety and consistency

Also make keys case-sensitive
This commit is contained in:
李通洲
2025-08-02 18:51:03 +08:00
parent 3cef51ec4a
commit 0b02543ef2
79 changed files with 333 additions and 603 deletions
+11 -15
View File
@@ -176,18 +176,14 @@ bool ffParseColorsCommandOptions(FFColorsOptions* options, const char* key, cons
void ffParseColorsJsonObject(FFColorsOptions* options, yyjson_val* module)
{
yyjson_val *key_, *val;
yyjson_val *key, *val;
size_t idx, max;
yyjson_obj_foreach(module, idx, max, key_, val)
yyjson_obj_foreach(module, idx, max, key, val)
{
const char* key = yyjson_get_str(key_);
if(ffStrEqualsIgnCase(key, "type") || ffStrEqualsIgnCase(key, "condition"))
continue;
if (ffJsonConfigParseModuleArgs(key, val, &options->moduleArgs))
continue;
if (ffStrEqualsIgnCase(key, "symbol"))
if (unsafe_yyjson_equals_str(key, "symbol"))
{
int value;
const char* error = ffJsonConfigParseEnum(val, &value, (FFKeyValuePair[]) {
@@ -201,22 +197,22 @@ void ffParseColorsJsonObject(FFColorsOptions* options, yyjson_val* module)
{},
});
if (error)
ffPrintError(FF_COLORS_MODULE_NAME, 0, NULL, FF_PRINT_TYPE_NO_CUSTOM_KEY, "Invalid %s value: %s", key, error);
ffPrintError(FF_COLORS_MODULE_NAME, 0, NULL, FF_PRINT_TYPE_NO_CUSTOM_KEY, "Invalid %s value: %s", unsafe_yyjson_get_str(key), error);
else
options->symbol = (FFColorsSymbol) value;
continue;
}
if (ffStrEqualsIgnCase(key, "paddingLeft"))
if (unsafe_yyjson_equals_str(key, "paddingLeft"))
{
options->paddingLeft = (uint32_t) yyjson_get_uint(val);
continue;
}
if (ffStrEqualsIgnCase(key, "block"))
if (unsafe_yyjson_equals_str(key, "block"))
{
if (!yyjson_is_obj(val))
ffPrintError(FF_COLORS_MODULE_NAME, 0, NULL, FF_PRINT_TYPE_NO_CUSTOM_KEY, "Invalid %s value: must be an object", key);
ffPrintError(FF_COLORS_MODULE_NAME, 0, NULL, FF_PRINT_TYPE_NO_CUSTOM_KEY, "Invalid %s value: must be an object", unsafe_yyjson_get_str(key));
else
{
yyjson_val* width = yyjson_obj_get(val, "width");
@@ -227,15 +223,15 @@ void ffParseColorsJsonObject(FFColorsOptions* options, yyjson_val* module)
if (range)
{
if (!yyjson_is_arr(range) || yyjson_arr_size(range) != 2)
ffPrintError(FF_COLORS_MODULE_NAME, 0, NULL, FF_PRINT_TYPE_NO_CUSTOM_KEY, "Invalid %s.range value: must be an array of 2 elements", key);
ffPrintError(FF_COLORS_MODULE_NAME, 0, NULL, FF_PRINT_TYPE_NO_CUSTOM_KEY, "Invalid %s.range value: must be an array of 2 elements", unsafe_yyjson_get_str(key));
else
{
uint8_t start = (uint8_t) yyjson_get_uint(yyjson_arr_get(range, 0));
uint8_t end = (uint8_t) yyjson_get_uint(yyjson_arr_get(range, 1));
if (start > end)
ffPrintError(FF_COLORS_MODULE_NAME, 0, NULL, FF_PRINT_TYPE_NO_CUSTOM_KEY, "Invalid %s.range value: range[0] > range[1]", key);
ffPrintError(FF_COLORS_MODULE_NAME, 0, NULL, FF_PRINT_TYPE_NO_CUSTOM_KEY, "Invalid %s.range value: range[0] > range[1]", unsafe_yyjson_get_str(key));
else if (end > 15)
ffPrintError(FF_COLORS_MODULE_NAME, 0, NULL, FF_PRINT_TYPE_NO_CUSTOM_KEY, "Invalid %s.range value: range[1] > 15", key);
ffPrintError(FF_COLORS_MODULE_NAME, 0, NULL, FF_PRINT_TYPE_NO_CUSTOM_KEY, "Invalid %s.range value: range[1] > 15", unsafe_yyjson_get_str(key));
else
{
options->block.range[0] = start;
@@ -247,7 +243,7 @@ void ffParseColorsJsonObject(FFColorsOptions* options, yyjson_val* module)
continue;
}
ffPrintError(FF_COLORS_MODULE_NAME, 0, NULL, FF_PRINT_TYPE_NO_CUSTOM_KEY, "Unknown JSON key %s", key);
ffPrintError(FF_COLORS_MODULE_NAME, 0, NULL, FF_PRINT_TYPE_NO_CUSTOM_KEY, "Unknown JSON key %s", unsafe_yyjson_get_str(key));
}
}