Ziti C SDK
|
#include <stdbool.h>
#include <stddef.h>
#include <stdlib.h>
#include <sys/time.h>
#include <string.h>
#include <json-c/json.h>
#include "externs.h"
#include "model_collections.h"
#include "types.h"
#include <unistd.h>
Go to the source code of this file.
Data Structures | |
struct | field_meta |
struct | type_meta |
struct | tag |
Macros | |
#define | MODEL_API |
set of macros to help generate struct and function for our model; | |
#define | MODEL_JSON_COMPACT 0x1 |
#define | none(t) t |
#define | ptr(t) t* |
#define | array(t) t##_array |
#define | map(t) model_map |
#define | list(t) model_list |
#define | FIELD_DECL(name, type, mod, path, _) mod(type) name; |
#define | DECLARE_MODEL(type, model) |
#define | DECLARE_MODEL_FUNCS(T) |
#define | gen_field_meta(n, memtype, modifier, p, partype) |
#define | IMPL_MODEL(type, model) |
#define | IMPL_MODEL_FUNCS(T) |
#define | MODEL_PARSE_INVALID (-2) |
#define | MODEL_PARSE_PARTIAL (-3) |
#define | mk_enum2(v, t) t##_##v |
#define | mk_enum3(v, n, t) t##_##v |
#define | enum_f2(v, t) const t v |
#define | enum_f3(v, n, t) const t v |
#define | get_ovrd(_1, _2, _3, NAME, ...) NAME |
#define | mk_enum(...) get_ovrd(__VA_ARGS__, mk_enum3, mk_enum2)(__VA_ARGS__), |
#define | enum_field(...) get_ovrd(__VA_ARGS__, enum_f3, enum_f2)(__VA_ARGS__); |
#define | DECLARE_ENUM(Enum, Values) |
#define | get_value_of_ovrd(_1, _2, _3, _4, _5, NAME, ...) NAME |
#define | enum_value_of4(v, t, str, len) if(strncmp(str,#v,len) == 0){return (t)t##s.v;} |
#define | enum_value_of5(n, v, t, str, len) if(strncmp(str,v,len) == 0){return (t)t##s.n;} |
#define | enum_value_of(...) get_value_of_ovrd(__VA_ARGS__, enum_value_of5, enum_value_of4)(__VA_ARGS__) |
#define | enum_c2(v, t) case t##_##v: return #v |
#define | enum_c3(n, v, t) case t##_##n: return v |
#define | enum_case(...) get_ovrd(__VA_ARGS__, enum_c3, enum_c2)(__VA_ARGS__); |
#define | enum_field_v2(v, t) .v = t##_##v |
#define | enum_field_v3(n, v, t) .n = t##_##n |
#define | enum_field_val(...) get_ovrd(__VA_ARGS__, enum_field_v3, enum_field_v2)(__VA_ARGS__), |
#define | IMPL_ENUM(Enum, Values) |
Typedefs | |
typedef const char * | model_string |
typedef model_string * | model_string_array |
typedef int64_t | model_number |
typedef model_number ** | model_number_array |
typedef bool | model_bool |
typedef model_bool ** | model_bool_array |
typedef char * | json |
typedef int(* | _parse_f) (void *obj, const char *json, void *tok) |
typedef int(* | _to_json_f) (const void *obj, void *buf, int indent, int flags) |
typedef void(* | _free_f) (void *obj) |
typedef int(* | _cmp_f) (const void *lh, const void *rh) |
typedef int(* | from_json_func) (void *obj, struct json_object *json, const struct type_meta *meta) |
typedef struct json_object *(* | to_json_func) (const void *obj) |
typedef struct timeval | timestamp |
Enumerations | |
enum | _field_mod { none_mod , ptr_mod , array_mod , map_mod , list_mod } |
enum | tag_type { tag_null , tag_bool , tag_number , tag_string } |
Functions | |
void * | model_alloc (const type_meta *meta) |
void | model_free (void *obj, const type_meta *meta) |
void | model_free_array (void ***ap, const type_meta *meta) |
int | model_cmp (const void *lh, const void *rh, const type_meta *meta) |
int | model_parse (void *obj, const char *json, size_t len, const type_meta *meta) |
int | model_from_json (void *obj, struct json_object *json, const type_meta *meta) |
int | model_list_from_json (model_list *l, struct json_object *json, const type_meta *meta) |
int | model_array_from_json (void ***obj, struct json_object *json, const type_meta *meta) |
int | model_parse_array (void ***arp, const char *json, size_t len, const type_meta *meta) |
int | model_parse_list (model_list *list, const char *json, size_t len, const type_meta *meta) |
char * | model_to_json (const void *obj, const type_meta *meta, int flags, size_t *len) |
ssize_t | model_to_json_r (const void *obj, const type_meta *meta, int flags, char *outbuf, size_t max) |
const type_meta * | get_model_bool_meta () |
const type_meta * | get_model_number_meta () |
const type_meta * | get_model_string_meta () |
const type_meta * | get_timestamp_meta () |
const type_meta * | get_json_meta () |
const type_meta * | get_duration_meta () |
int | model_map_compare (const model_map *lh, const model_map *rh, const type_meta *m) |
const type_meta * | get_tag_meta () |
int | enum_from_json (void *ptr, struct json_object *j, const void *enum_type) |
int | json_enum (const void *ptr, void *buf, int indent, int flags, const void *enum_type) |
struct json_object * | enum_to_json (const void *ptr, const void *enum_type) |
#define array | ( | t | ) | t##_array |
#define DECLARE_ENUM | ( | Enum, | |
Values | |||
) |
#define DECLARE_MODEL | ( | type, | |
model | |||
) |
#define DECLARE_MODEL_FUNCS | ( | T | ) |
#define enum_c2 | ( | v, | |
t | |||
) | case t##_##v: return #v |
#define enum_c3 | ( | n, | |
v, | |||
t | |||
) | case t##_##n: return v |
#define enum_f2 | ( | v, | |
t | |||
) | const t v |
#define enum_f3 | ( | v, | |
n, | |||
t | |||
) | const t v |
#define enum_field_v2 | ( | v, | |
t | |||
) | .v = t##_##v |
#define enum_field_v3 | ( | n, | |
v, | |||
t | |||
) | .n = t##_##n |
#define enum_field_val | ( | ... | ) | get_ovrd(__VA_ARGS__, enum_field_v3, enum_field_v2)(__VA_ARGS__), |
#define enum_value_of | ( | ... | ) | get_value_of_ovrd(__VA_ARGS__, enum_value_of5, enum_value_of4)(__VA_ARGS__) |
#define enum_value_of4 | ( | v, | |
t, | |||
str, | |||
len | |||
) | if(strncmp(str,#v,len) == 0){return (t)t##s.v;} |
#define enum_value_of5 | ( | n, | |
v, | |||
t, | |||
str, | |||
len | |||
) | if(strncmp(str,v,len) == 0){return (t)t##s.n;} |
#define FIELD_DECL | ( | name, | |
type, | |||
mod, | |||
path, | |||
_ | |||
) | mod(type) name; |
#define gen_field_meta | ( | n, | |
memtype, | |||
modifier, | |||
p, | |||
partype | |||
) |
#define get_ovrd | ( | _1, | |
_2, | |||
_3, | |||
NAME, | |||
... | |||
) | NAME |
#define get_value_of_ovrd | ( | _1, | |
_2, | |||
_3, | |||
_4, | |||
_5, | |||
NAME, | |||
... | |||
) | NAME |
#define IMPL_ENUM | ( | Enum, | |
Values | |||
) |
#define IMPL_MODEL | ( | type, | |
model | |||
) |
#define IMPL_MODEL_FUNCS | ( | T | ) |
#define list | ( | t | ) | model_list |
#define map | ( | t | ) | model_map |
#define mk_enum2 | ( | v, | |
t | |||
) | t##_##v |
#define mk_enum3 | ( | v, | |
n, | |||
t | |||
) | t##_##v |
#define MODEL_API |
set of macros to help generate struct and function for our model;
DECLARE_MODEL(type, model_def) : type
name of the struct, model_def
- marco defining fields for the model
NOTE: matching IMPL_MODEL macro in model.c is used to generate function implementations
Fields are defined with name, type, type modifier, and path (for JSON mapping) type could be primitives (bool, int, string, timestamp - string in ISO8601 format) or other model types type modifier: none, ptr, array
The following functions are generated:
stdout
, indent
is used for printing nested model objects #define MODEL_JSON_COMPACT 0x1 |
#define MODEL_PARSE_INVALID (-2) |
#define MODEL_PARSE_PARTIAL (-3) |
#define none | ( | t | ) | t |
#define ptr | ( | t | ) | t* |
typedef int(* _cmp_f) (const void *lh, const void *rh) |
typedef void(* _free_f) (void *obj) |
typedef int(* _parse_f) (void *obj, const char *json, void *tok) |
typedef int(* _to_json_f) (const void *obj, void *buf, int indent, int flags) |
typedef char* json |
typedef bool model_bool |
typedef model_bool** model_bool_array |
typedef int64_t model_number |
typedef model_number** model_number_array |
typedef const char* model_string |
typedef model_string* model_string_array |
typedef struct timeval timestamp |
typedef struct json_object *(* to_json_func) (const void *obj) |
enum _field_mod |
enum tag_type |
int enum_from_json | ( | void * | ptr, |
struct json_object * | j, | ||
const void * | enum_type | ||
) |
struct json_object * enum_to_json | ( | const void * | ptr, |
const void * | enum_type | ||
) |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
const type_meta * get_tag_meta | ( | ) |
|
extern |
int json_enum | ( | const void * | ptr, |
void * | buf, | ||
int | indent, | ||
int | flags, | ||
const void * | enum_type | ||
) |
void * model_alloc | ( | const type_meta * | meta | ) |
int model_array_from_json | ( | void *** | obj, |
struct json_object * | json, | ||
const type_meta * | meta | ||
) |
int model_cmp | ( | const void * | lh, |
const void * | rh, | ||
const type_meta * | meta | ||
) |
void model_free | ( | void * | obj, |
const type_meta * | meta | ||
) |
void model_free_array | ( | void *** | ap, |
const type_meta * | meta | ||
) |
int model_from_json | ( | void * | obj, |
struct json_object * | json, | ||
const type_meta * | meta | ||
) |
int model_list_from_json | ( | model_list * | l, |
struct json_object * | json, | ||
const type_meta * | meta | ||
) |
int model_parse | ( | void * | obj, |
const char * | json, | ||
size_t | len, | ||
const type_meta * | meta | ||
) |
int model_parse_array | ( | void *** | arp, |
const char * | json, | ||
size_t | len, | ||
const type_meta * | meta | ||
) |
int model_parse_list | ( | model_list * | list, |
const char * | json, | ||
size_t | len, | ||
const type_meta * | meta | ||
) |
char * model_to_json | ( | const void * | obj, |
const type_meta * | meta, | ||
int | flags, | ||
size_t * | len | ||
) |
ssize_t model_to_json_r | ( | const void * | obj, |
const type_meta * | meta, | ||
int | flags, | ||
char * | outbuf, | ||
size_t | max | ||
) |