ascii-chat 0.11.33
Video chat in your terminal
Loading...
Searching...
No Matches
schema.h
Go to the documentation of this file.
1
14#pragma once
15
16#include <stdbool.h>
17#include <stddef.h>
18#include "../common.h"
19#include "../options/options.h"
20#include "../options/builder.h"
21
30
41typedef bool (*builder_validate_fn_t)(const void *options_struct, char **error_msg);
42
49typedef struct {
50 const char *toml_key;
51 const char *cli_flag;
54 const char *category;
55 size_t field_offset;
56 size_t field_size;
57
58 // Validation - uses builder's validate function directly
60
61 // Custom parsing for OPTION_TYPE_CALLBACK
62 bool (*parse_fn)(const char *arg, void *dest, char **error_msg);
63
64 // Mode applicability bitmask
66
67 // Documentation
68 const char *description;
69
70 // Type-specific constraints (optional)
71 union {
72 struct {
73 int min;
74 int max;
75 } int_range;
76 struct {
77 double min;
78 double max;
79 } float_range;
80 } constraints;
81
82 // Mode-aware default getter (for options with mode-specific defaults)
83 const void *(*mode_default_getter)(
84 asciichat_mode_t mode);
86
93
100const config_option_metadata_t **config_schema_get_by_category(const char *category, size_t *count);
101
108
121asciichat_error_t config_schema_build_from_configs(const options_config_t **configs, size_t num_configs);
122
132void config_schema_destroy(void);
option_type_t
Option value types.
Definition builder.h:161
asciichat_error_t
Error and exit codes - unified status values (0-255)
Definition error_codes.h:49
asciichat_mode_t
Mode type for options parsing.
option_mode_bitmask_t
Option mode bitmask.
const config_option_metadata_t ** config_schema_get_by_category(const char *category, size_t *count)
Get all option metadata for a category.
Definition schema.c:401
bool(* builder_validate_fn_t)(const void *options_struct, char **error_msg)
Validation function from options builder.
Definition schema.h:41
void config_schema_destroy(void)
Clean up dynamically allocated schema resources.
Definition schema.c:454
option_context_t
Context where an option can appear.
Definition schema.h:25
@ OPTION_CONTEXT_BOTH
Can appear in both CLI and config.
Definition schema.h:28
@ OPTION_CONTEXT_CONFIG
Config-only option (never on CLI)
Definition schema.h:27
@ OPTION_CONTEXT_CLI
CLI-only option (cannot appear in config)
Definition schema.h:26
const config_option_metadata_t * config_schema_get_all(size_t *count)
Get all option metadata.
Definition schema.c:434
asciichat_error_t config_schema_build_from_configs(const options_config_t **configs, size_t num_configs)
Build schema dynamically from options builder configs.
Definition schema.c:240
const config_option_metadata_t * config_schema_get_by_toml_key(const char *toml_key)
Get option metadata by TOML key.
Definition schema.c:380
ClangTool/LibTooling compatibility shim for stdbool.h.
#define bool
Definition stdbool.h:61
Option metadata for config file parsing.
Definition schema.h:49
option_context_t context
Where this option can appear.
Definition schema.h:53
option_type_t type
Value type (from builder)
Definition schema.h:52
size_t field_size
Size of field in options_t.
Definition schema.h:56
option_mode_bitmask_t mode_bitmask
Which modes this option applies to.
Definition schema.h:65
size_t field_offset
offsetof(options_t, field) - where to store value
Definition schema.h:55
const char * description
Description for docs/help generation.
Definition schema.h:68
const char * category
Category name (e.g., "network", "client", "audio")
Definition schema.h:54
builder_validate_fn_t validate_fn
Builder's validation function (can be NULL for simple types)
Definition schema.h:59
const char * toml_key
TOML key path (e.g., "network.port", "client.address")
Definition schema.h:50
const char * cli_flag
CLI flag name (e.g., "--port") or NULL if no CLI flag.
Definition schema.h:51
Options configuration.
Definition builder.h:401