37static unsigned char buf[1024];
41 size_t bufsz =
sizeof(buf);
44 if (lite3_init_obj(buf, &buflen, bufsz) < 0
45 ||
lite3_set_str(buf, &buflen, 0, bufsz,
"title",
"C Programming Language, 2nd Edition") < 0
46 ||
lite3_set_str(buf, &buflen, 0, bufsz,
"language",
"en") < 0
47 ||
lite3_set_f64(buf, &buflen, 0, bufsz,
"price_usd", 60.30) < 0
51 perror(
"Failed to build message");
54 printf(
"buflen: %zu\n", buflen);
56 perror(
"Failed to print JSON");
69 perror(
"Failed to read message");
72 printf(
"\ntitle: %s\n",
LITE3_STR(buf, title));
73 printf(
"language: %s\n",
LITE3_STR(buf, language));
74 printf(
"price_usd: %f\n", price_usd);
75 printf(
"pages: %li\n", pages);
76 printf(
"in_stock: %s\n\n", in_stock ?
"true" :
"false");
79 printf(
"No reviews to display.\n");
82 printf(
"\nTitle field exists: %s\n",
lite3_exists(buf, buflen, 0,
"title") ?
"true" :
"false");
83 printf(
"Price field exists: %s\n",
lite3_exists(buf, buflen, 0,
"price_usd") ?
"true" :
"false");
84 printf(
"ISBN field exists: %s\n",
lite3_exists(buf, buflen, 0,
"isbn") ?
"true" :
"false");
87 printf(
"\nTitle is string type: %s\n", title_type ==
LITE3_TYPE_STRING ?
"true" :
"false");
88 printf(
"Title is integer type: %s\n", title_type ==
LITE3_TYPE_I64 ?
"true" :
"false");
91 if (
lite3_get(buf, buflen, 0,
"price_usd", &price_val) < 0) {
92 perror(
"Failed to get price_usd");
95 printf(
"\nPrice is string type: %s\n", lite3_val_is_str(price_val) ?
"true" :
"false");
96 printf(
"Price is double type: %s\n", lite3_val_is_f64(price_val) ?
"true" :
"false");
98 printf(
"price_val value: %f\n", lite3_val_f64(price_val));
102 uint32_t entry_count;
103 if (
lite3_count(buf, buflen, 0, &entry_count) < 0) {
104 perror(
"Failed to get entry count");
107 printf(
"\nObject entries: %u\n", entry_count);
#define lite3_get(buf, buflen, ofs, key, out)
Get value from object.
#define lite3_get_bool(buf, buflen, ofs, key, out)
Get boolean value by key.
#define lite3_get_f64(buf, buflen, ofs, key, out)
Get floating point value by key.
#define lite3_get_str(buf, buflen, ofs, key, out)
Get string value by key.
#define lite3_get_i64(buf, buflen, ofs, key, out)
Get integer value by key.
int lite3_json_print(const unsigned char *buf, size_t buflen, size_t ofs)
Print Lite³ buffer as JSON to stdout
#define lite3_set_null(buf, inout_buflen, ofs, bufsz, key)
Set null in object.
#define lite3_set_bool(buf, inout_buflen, ofs, bufsz, key, value)
Set boolean in object.
#define lite3_set_f64(buf, inout_buflen, ofs, bufsz, key, value)
Set floating point in object.
#define lite3_set_str(buf, inout_buflen, ofs, bufsz, key, str)
Set string in object.
#define lite3_set_i64(buf, inout_buflen, ofs, bufsz, key, value)
Set integer in object.
lite3_type
enum containing all Lite³ types
#define LITE3_STR(buf, val)
Generational pointer / safe access wrapper.
@ LITE3_TYPE_STRING
maps to 'string' type in JSON
@ LITE3_TYPE_F64
maps to 'number' type in JSON; underlying datatype: double
@ LITE3_TYPE_I64
maps to 'number' type in JSON; underlying datatype: int64_t
#define lite3_exists(buf, buflen, ofs, key)
Attempt to find a key.
#define lite3_get_type(buf, buflen, ofs, key)
Find value by key and return value type.
#define lite3_is_null(buf, buflen, ofs, key)
Find value by key and test for null type.
static int lite3_count(unsigned char *buf, size_t buflen, size_t ofs, uint32_t *out)
Write back the number of object entries or array elements.
static size_t lite3_val_type_size(lite3_val *val)
Returns the size of the value type.
Struct holding a reference to a string inside a Lite³ buffer.
Struct representing a value inside a Lite³ buffer.