ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
opts.cpp File Reference

Go to the source code of this file.

Functions

 EMSCRIPTEN_DECLARE_VAL_TYPE (OptionsSnapshot)
int patch_options (OptionsPatch patch, double expected_revision)
int initial_options (OptionsPatch patch)
 EMSCRIPTEN_BINDINGS (ascii_chat_options)

Function Documentation

◆ EMSCRIPTEN_BINDINGS()

EMSCRIPTEN_BINDINGS ( ascii_chat_options )

Definition at line 69 of file opts.cpp.

69 {
70 emscripten::function("browser_options_revision", +[]() { return static_cast<double>(options_revision()); });
71 emscripten::register_optional<std::string>();
72 emscripten::register_type<OptionsPatch>("OptionsPatch", "Record<string, number | string | boolean>");
73 emscripten::register_type<OptionsSnapshot>(
74 "OptionsSnapshot", "{ revision: number; values: Record<string, number | string | boolean> } | null");
75 emscripten::function("patchOptions", &patch_options);
76 emscripten::function("readOptions", &read_options);
77 emscripten::function("optionHelp", &option_help);
78}
int patch_options(OptionsPatch patch, double expected_revision)
Definition opts.cpp:15
uint64_t options_revision(void)
Definition rcu.c:876

References options_revision(), and patch_options().

◆ EMSCRIPTEN_DECLARE_VAL_TYPE()

EMSCRIPTEN_DECLARE_VAL_TYPE ( OptionsSnapshot )

◆ initial_options()

int initial_options ( OptionsPatch patch)

Definition at line 28 of file opts.cpp.

28 {
29 emscripten::val object = patch;
30 if (!object.isNull() && !object.isUndefined() && object.typeOf().as<std::string>() == "object" &&
31 !emscripten::val::global("Array").call<bool>("isArray", object) &&
32 emscripten::val::global("Object").call<emscripten::val>("keys", object)["length"].as<unsigned>() == 0)
33 return ASCIICHAT_OK;
34 int result = patch_options(patch, -1);
35 if (result == ASCIICHAT_OK) {
36 options_snapshot_t *snapshot = SAFE_MALLOC(sizeof(*snapshot), options_snapshot_t *);
37 if (options_read_snapshot(snapshot) == ASCIICHAT_OK)
39 SAFE_FREE(snapshot);
40 }
41 return result;
42}
#define SAFE_FREE(ptr)
Definition common.h:377
#define SAFE_MALLOC(size, cast)
Definition common.h:265
@ ASCIICHAT_OK
Definition error_codes.h:46
void log_set_level(log_level_t level)
Set the minimum log level.
Definition log.c:737
asciichat_error_t options_read_snapshot(options_snapshot_t *snapshot)
Definition rcu.c:865
log_level_t log_level
Log level threshold.
Definition options.h:1167

References ASCIICHAT_OK, options_state::log_level, log_set_level(), options_read_snapshot(), patch_options(), SAFE_FREE, SAFE_MALLOC, and options_snapshot_t::values.

◆ patch_options()

int patch_options ( OptionsPatch patch,
double expected_revision )

Definition at line 15 of file opts.cpp.

15 {
16 emscripten::val object = patch;
17 if (object.isNull() || object.isUndefined() || object.typeOf().as<std::string>() != "object" ||
18 emscripten::val::global("Array").call<bool>("isArray", object))
19 return SET_ERRNO(ERROR_INVALID_PARAM, "Options patch must be an object");
20 emscripten::val json = emscripten::val::global("JSON").call<emscripten::val>("stringify", object);
21 if (json.isUndefined())
22 return SET_ERRNO(ERROR_INVALID_PARAM, "Options patch cannot be serialized");
23 std::string text = json.as<std::string>();
24 return options_apply_json(text.c_str(), text.size(),
25 expected_revision < 0 ? OPTIONS_REVISION_ANY : static_cast<uint64_t>(expected_revision),
26 OPTIONS_ORIGIN_LOCAL, nullptr);
27}
#define SET_ERRNO(code,...)
unsigned long long uint64_t
Definition common.h:63
@ ERROR_INVALID_PARAM
@ OPTIONS_ORIGIN_LOCAL
#define OPTIONS_REVISION_ANY
asciichat_error_t options_apply_json(const char *json, size_t length, uint64_t expected_revision, options_origin_t origin, options_patch_result_t *result)
Definition rcu.c:1000

References ERROR_INVALID_PARAM, options_apply_json(), OPTIONS_ORIGIN_LOCAL, OPTIONS_REVISION_ANY, and SET_ERRNO.

Referenced by EMSCRIPTEN_BINDINGS(), and initial_options().