ascii-chat 0.8.38
Real-time terminal-based video chat with ASCII art conversion
Loading...
Searching...
No Matches
enums.c
Go to the documentation of this file.
1
7#include <string.h>
8#include <ascii-chat/options/enums.h>
9#include <ascii-chat/common.h>
10
11/* Enum value definitions - SINGLE SOURCE OF TRUTH */
12
13static const char *log_level_values[] = {"dev", "debug", "info", "warn", "error", "fatal"};
14
15static const char *color_mode_values[] = {"auto", "none", "16", "256", "truecolor"};
16
17static const char *color_filter_values[] = {"none", "black", "white", "green", "magenta", "fuchsia", "orange",
18 "teal", "cyan", "pink", "red", "yellow", "rainbow"};
19
20static const char *palette_values[] = {"standard", "blocks", "digital", "minimal", "cool", "custom"};
21
22static const char *render_mode_values[] = {"foreground", "fg", "background", "bg", "half-block"};
23
24static const char *reconnect_values[] = {"off", "auto"};
25
26/* Enum registry - maps option names to their values */
27static const enum_descriptor_t enum_registry[] = {
28 {.option_name = "log-level",
29 .values = log_level_values,
30 .value_count = sizeof(log_level_values) / sizeof(log_level_values[0])},
31 {.option_name = "color-mode",
32 .values = color_mode_values,
33 .value_count = sizeof(color_mode_values) / sizeof(color_mode_values[0])},
34 {.option_name = "color-filter",
35 .values = color_filter_values,
36 .value_count = sizeof(color_filter_values) / sizeof(color_filter_values[0])},
37 {.option_name = "palette",
38 .values = palette_values,
39 .value_count = sizeof(palette_values) / sizeof(palette_values[0])},
40 {.option_name = "render-mode",
41 .values = render_mode_values,
42 .value_count = sizeof(render_mode_values) / sizeof(render_mode_values[0])},
43 {.option_name = "reconnect",
44 .values = reconnect_values,
45 .value_count = sizeof(reconnect_values) / sizeof(reconnect_values[0])},
46 /* Terminator */
47 {.option_name = NULL, .values = NULL, .value_count = 0}};
48
49const char **options_get_enum_values(const char *option_name, size_t *value_count) {
50 if (!option_name || !value_count) {
51 return NULL;
52 }
53
54 for (size_t i = 0; enum_registry[i].option_name != NULL; i++) {
55 if (strcmp(enum_registry[i].option_name, option_name) == 0) {
56 *value_count = enum_registry[i].value_count;
57 return enum_registry[i].values;
58 }
59 }
60
61 *value_count = 0;
62 return NULL;
63}
64
65bool options_is_enum_option(const char *option_name) {
66 if (!option_name) {
67 return false;
68 }
69
70 for (size_t i = 0; enum_registry[i].option_name != NULL; i++) {
71 if (strcmp(enum_registry[i].option_name, option_name) == 0) {
72 return true;
73 }
74 }
75
76 return false;
77}
const char ** options_get_enum_values(const char *option_name, size_t *value_count)
Definition enums.c:49
bool options_is_enum_option(const char *option_name)
Definition enums.c:65