12#include "../nyx_node_internal.h"
39 if(strcmp(
"Idle", state) == 0) {
42 if(strcmp(
"Ok", state) == 0) {
45 if(strcmp(
"Busy", state) == 0) {
48 if(strcmp(
"Alert", state) == 0) {
78 if(strcmp(
"ro", perm) == 0) {
81 if(strcmp(
"wo", perm) == 0) {
84 if(strcmp(
"rw", perm) == 0) {
114 if(strcmp(
"OneOfMany", rule) == 0) {
117 if(strcmp(
"AtMostOne", rule) == 0) {
120 if(strcmp(
"AnyOfMany", rule) == 0) {
147 if(strcmp(
"On", onoff) == 0) {
150 if(strcmp(
"Off", onoff) == 0) {
161STR_t nyx_blob_state_to_str(nyx_blob_state_t blob)
165 case NYX_BLOB_STATE_DISABLED:
167 case NYX_BLOB_STATE_ENABLED:
176nyx_blob_state_t nyx_str_to_blob_state(
STR_t blob)
178 if(strcmp(
"Never", blob) == 0) {
179 return NYX_BLOB_STATE_DISABLED;
181 if(strcmp(
"Also", blob) == 0
183 strcmp(
"Only", blob) == 0
185 return NYX_BLOB_STATE_ENABLED;
195STR_t nyx_stream_state_to_str(nyx_stream_state_t stream)
199 case NYX_STREAM_STATE_DISABLED:
201 case NYX_STREAM_STATE_ENABLED:
210nyx_stream_state_t nyx_str_to_stream_state(
STR_t stream)
212 if(strcmp(
"Never", stream) == 0) {
213 return NYX_STREAM_STATE_DISABLED;
215 if(strcmp(
"Also", stream) == 0
217 strcmp(
"Only", stream) == 0
219 return NYX_STREAM_STATE_ENABLED;
229bool nyx_dict_set_boolean_unref(
nyx_dict_t *dict,
STR_t key,
bool value)
233 bool result = nyx_dict_set(dict, key,
boolean);
235 nyx_object_unref(
boolean);
242bool nyx_dict_set_number_unref(
nyx_dict_t *dict,
STR_t key,
double value)
246 bool result = nyx_dict_set(dict, key, number);
248 nyx_object_unref(number);
259 bool result = nyx_dict_set(dict, key,
string);
261 nyx_object_unref(
string);
270 nyx_string_t *
string = nyx_string_from_buff(size, buff, managed);
272 bool result = nyx_dict_set(dict, key,
string);
274 nyx_object_unref(
string);
285 if(src_object != NULL)
289 switch(src_object->type)
299 return nyx_dict_set_number_unref(dst, key, nyx_number_get((
nyx_number_t *) src_object));
304 return nyx_dict_set_boolean_unref(dst, key, nyx_boolean_get((
nyx_boolean_t *) src_object));
328int internal_get_timestamp(
size_t len,
str_t str)
332 time_t now = time(NULL);
334 localtime_r(&now, &tm_now);
339 "%04d-%02d-%02dT%02d:%02d:%02d",
340 tm_now.tm_year + 1900,
357 internal_get_timestamp(
sizeof(timestamp), timestamp);
359 nyx_dict_set_string_unref(dict,
"@timestamp",
nyx_string_dup(timestamp),
true);
363 STR_t group =
"Main";
369 if(opts->
group != NULL && opts->
group[0] !=
'\0')
376 if(opts->
label != NULL && opts->
label[0] !=
'\0') {
380 if(opts->
hints != NULL && opts->
hints[0] !=
'\0') {
391 nyx_dict_set_number_unref(dict,
"@timeout", opts->
timeout);
399 nyx_dict_set_string_unref(dict,
"@group",
nyx_string_dup(group),
true);
406bool internal_blob_is_compressed(
const nyx_dict_t *def)
419 internal_copy(dst_dict, src_dict,
"@size");
420 internal_copy(dst_dict, src_dict,
"@format");
424 nyx_object_t *src_payload = nyx_dict_get(src_dict,
"$");
433 nyx_string_get_buff((
nyx_string_t *) src_payload, &src_size, &src_buff);
440 if(internal_blob_is_compressed(src_dict)) {
449 nyx_dict_set(dst_dict,
"$", nyx_string_from_buff(dst_len, dst_str,
true));
469 nyx_dict_set_string_unref(result,
"<>", set_tag,
false);
473 internal_copy(result, vector,
"@client");
474 internal_copy(result, vector,
"@device");
475 internal_copy(result, vector,
"@name");
476 internal_copy(result, vector,
"@state");
477 internal_copy(result, vector,
"@timeout");
478 internal_copy(result, vector,
"@timestamp");
479 internal_copy(result, vector,
"@message");
483 nyx_dict_set(result,
"children", children);
505 nyx_dict_set_string_unref(dst_dict,
"<>", one_tag,
false);
507 internal_copy(dst_dict, src_dict,
"@name");
509 if(strcmp(one_tag,
"oneBLOB") == 0) {
510 internal_copy_blob(dst_dict, src_dict);
513 internal_copy(dst_dict, src_dict,
"$");
518 nyx_list_push(children, dst_dict);
520 nyx_object_unref(dst_dict);
529 nyx_object_unref(children);
Struct describing a JSON boolean object.
Struct describing a JSON dict object.
#define NYX_LIST_ITER(list)
Initializes a JSON list iterator.
Struct describing a JSON list iterator.
Struct describing a JSON list object.
#define NYX_LOG_FATAL(fmt,...)
Logs a fatal message.
#define NYX_LOG_ERROR(fmt,...)
Logs an error message.
#define STR_t
Alias for const char *.
#define buff_t
Alias for void *.
#define BUFF_t
Alias for const void *.
__NYX_NULLABLE__ str_t nyx_string_dup(__NYX_NULLABLE__ STR_t s)
Similar to libc strdup.
#define str_t
Alias for char *.
Struct describing a JSON number object.
__NYX_ZEROABLE__ double timeout
Worst-case time [sec] to apply, 0 by default, N/A for RO.
__NYX_NULLABLE__ STR_t label
GUI label, if NULL, replaced by the device name.
__NYX_NULLABLE__ STR_t hints
GUI Markdown description.
__NYX_NULLABLE__ STR_t message
Free comment.
__NYX_NULLABLE__ STR_t group
GUI group membership, if NULL, replaced by "Main".
nyx_perm_t
Vector permission hint.
nyx_state_t
Vector state hint.
nyx_rule_t
Switch vector rule hint.
@ NYX_PERM_RW
Read & write.
@ NYX_STATE_IDLE
State is idle.
@ NYX_STATE_BUSY
State is busy.
@ NYX_STATE_OK
State is ok.
@ NYX_STATE_ALERT
State is alert.
@ NYX_ONOFF_ON
Switch is ON.
@ NYX_ONOFF_OFF
Switch is OFF.
@ NYX_RULE_ONE_OF_MANY
Only one switch of many can be ON (e.g., radio buttons).
@ NYX_RULE_ANY_OF_MANY
Any number of switches can be ON (e.g., check boxes).
@ NYX_RULE_AT_MOST_ONE
At most one switch can be ON, but all switches can be OFF.
Struct describing the options for INDI / Nyx vectors.
@ NYX_TYPE_DICT
Dict object.
@ NYX_TYPE_LIST
List object.
@ NYX_TYPE_BOOLEAN
Boolean object.
@ NYX_TYPE_NUMBER
Number object.
@ NYX_TYPE_NULL
Null object.
@ NYX_TYPE_STRING
String object.
Struct describing a JSON object.
str_t value
C string payload.
nyx_object_t base
Common object header for JSON objects.
size_t length
C string length excluding NULL.
Struct describing a JSON string object.
__NYX_NULLABLE__ str_t nyx_base64_encode(__NYX_NULLABLE__ size_t *result_len, __NYX_ZEROABLE__ size_t size, __NYX_NULLABLE__ BUFF_t buff)
Encodes a buffer using the Base64 algorithm.
__NYX_NULLABLE__ str_t nyx_zlib_base64_deflate(__NYX_NULLABLE__ size_t *result_len, __NYX_ZEROABLE__ size_t size, __NYX_NULLABLE__ BUFF_t buff)
Compresses a buffer using the ZLib+Base64 algorithm.