mirror of
https://github.com/emqx/neuron.git
synced 2026-10-28 22:59:34 +08:00
support array type
This commit is contained in:
+81
-11
@@ -37,24 +37,94 @@ typedef enum neu_json_type {
|
||||
NEU_JSON_FLOAT,
|
||||
NEU_JSON_BOOL,
|
||||
NEU_JSON_OBJECT,
|
||||
NEU_JSON_BYTES,
|
||||
NEU_JSON_ARRAY_INT8,
|
||||
NEU_JSON_ARRAY_UINT8,
|
||||
NEU_JSON_ARRAY_INT16,
|
||||
NEU_JSON_ARRAY_UINT16,
|
||||
NEU_JSON_ARRAY_INT32,
|
||||
NEU_JSON_ARRAY_UINT32,
|
||||
NEU_JSON_ARRAY_INT64,
|
||||
NEU_JSON_ARRAY_UINT64,
|
||||
NEU_JSON_ARRAY_FLOAT,
|
||||
NEU_JSON_ARRAY_DOUBLE,
|
||||
NEU_JSON_ARRAY_BOOL,
|
||||
NEU_JSON_VALUE = NEU_JSON_UNDEFINE
|
||||
} neu_json_type_e;
|
||||
|
||||
typedef struct {
|
||||
uint8_t *bytes;
|
||||
int8_t *i8s;
|
||||
uint8_t length;
|
||||
} neu_json_value_array_int8_t;
|
||||
|
||||
typedef struct {
|
||||
uint8_t *u8s;
|
||||
uint8_t length;
|
||||
} neu_json_value_bytes_t;
|
||||
} neu_json_value_array_uint8_t;
|
||||
|
||||
typedef struct {
|
||||
int16_t *i16s;
|
||||
uint8_t length;
|
||||
} neu_json_value_array_int16_t;
|
||||
|
||||
typedef struct {
|
||||
uint16_t *u16s;
|
||||
uint8_t length;
|
||||
} neu_json_value_array_uint16_t;
|
||||
|
||||
typedef struct {
|
||||
int32_t *i32s;
|
||||
uint8_t length;
|
||||
} neu_json_value_array_int32_t;
|
||||
|
||||
typedef struct {
|
||||
uint32_t *u32s;
|
||||
uint8_t length;
|
||||
} neu_json_value_array_uint32_t;
|
||||
|
||||
typedef struct {
|
||||
int64_t *i64s;
|
||||
uint8_t length;
|
||||
} neu_json_value_array_int64_t;
|
||||
|
||||
typedef struct {
|
||||
uint64_t *u64s;
|
||||
uint8_t length;
|
||||
} neu_json_value_array_uint64_t;
|
||||
|
||||
typedef struct {
|
||||
float * f32s;
|
||||
uint8_t length;
|
||||
} neu_json_value_array_float_t;
|
||||
|
||||
typedef struct {
|
||||
double *f64s;
|
||||
uint8_t length;
|
||||
} neu_json_value_array_double_t;
|
||||
|
||||
typedef struct {
|
||||
bool * bools;
|
||||
uint8_t length;
|
||||
} neu_json_value_array_bool_t;
|
||||
|
||||
typedef union neu_json_value {
|
||||
int64_t val_int;
|
||||
uint8_t val_bit;
|
||||
float val_float;
|
||||
double val_double;
|
||||
bool val_bool;
|
||||
char * val_str;
|
||||
void * val_object;
|
||||
neu_json_value_bytes_t val_bytes;
|
||||
int64_t val_int;
|
||||
uint8_t val_bit;
|
||||
float val_float;
|
||||
double val_double;
|
||||
bool val_bool;
|
||||
char * val_str;
|
||||
void * val_object;
|
||||
neu_json_value_array_int8_t val_array_int8;
|
||||
neu_json_value_array_uint8_t val_array_uint8;
|
||||
neu_json_value_array_int16_t val_array_int16;
|
||||
neu_json_value_array_uint16_t val_array_uint16;
|
||||
neu_json_value_array_int32_t val_array_int32;
|
||||
neu_json_value_array_uint32_t val_array_uint32;
|
||||
neu_json_value_array_int64_t val_array_int64;
|
||||
neu_json_value_array_uint64_t val_array_uint64;
|
||||
neu_json_value_array_float_t val_array_float;
|
||||
neu_json_value_array_double_t val_array_double;
|
||||
neu_json_value_array_bool_t val_array_bool;
|
||||
} neu_json_value_u;
|
||||
|
||||
typedef enum neu_json_attribute {
|
||||
|
||||
+132
-6
@@ -980,6 +980,7 @@ static inline void neu_tag_value_to_json(neu_resp_tag_value_meta_t *tag_value,
|
||||
case NEU_TYPE_STRING:
|
||||
case NEU_TYPE_TIME:
|
||||
case NEU_TYPE_DATA_AND_TIME:
|
||||
case NEU_TYPE_ARRAY_CHAR:
|
||||
tag_json->t = NEU_JSON_STR;
|
||||
tag_json->value.val_str = tag_value->value.value.str;
|
||||
break;
|
||||
@@ -988,9 +989,69 @@ static inline void neu_tag_value_to_json(neu_resp_tag_value_meta_t *tag_value,
|
||||
tag_json->value.val_str = (char *) tag_value->value.value.ptr.ptr;
|
||||
break;
|
||||
case NEU_TYPE_BYTES:
|
||||
tag_json->t = NEU_JSON_BYTES;
|
||||
tag_json->value.val_bytes.length = tag_value->value.value.bytes.length;
|
||||
tag_json->value.val_bytes.bytes = tag_value->value.value.bytes.bytes;
|
||||
tag_json->t = NEU_JSON_ARRAY_UINT8;
|
||||
tag_json->value.val_array_uint8.length =
|
||||
tag_value->value.value.bytes.length;
|
||||
tag_json->value.val_array_uint8.u8s =
|
||||
tag_value->value.value.bytes.bytes;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_INT8:
|
||||
tag_json->t = NEU_JSON_ARRAY_INT8;
|
||||
tag_json->value.val_array_int8.length =
|
||||
tag_value->value.value.i8s.length;
|
||||
tag_json->value.val_array_int8.i8s = tag_value->value.value.i8s.i8s;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_INT16:
|
||||
tag_json->t = NEU_JSON_ARRAY_INT16;
|
||||
tag_json->value.val_array_int16.length =
|
||||
tag_value->value.value.i16s.length;
|
||||
tag_json->value.val_array_int16.i16s = tag_value->value.value.i16s.i16s;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_UINT16:
|
||||
tag_json->t = NEU_JSON_ARRAY_UINT16;
|
||||
tag_json->value.val_array_uint16.length =
|
||||
tag_value->value.value.u16s.length;
|
||||
tag_json->value.val_array_uint16.u16s =
|
||||
tag_value->value.value.u16s.u16s;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_INT32:
|
||||
tag_json->t = NEU_JSON_ARRAY_INT32;
|
||||
tag_json->value.val_array_int32.length =
|
||||
tag_value->value.value.i32s.length;
|
||||
tag_json->value.val_array_int32.i32s = tag_value->value.value.i32s.i32s;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_UINT32:
|
||||
tag_json->t = NEU_JSON_ARRAY_UINT32;
|
||||
tag_json->value.val_array_uint32.length =
|
||||
tag_value->value.value.u32s.length;
|
||||
tag_json->value.val_array_uint32.u32s =
|
||||
tag_value->value.value.u32s.u32s;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_INT64:
|
||||
tag_json->t = NEU_JSON_ARRAY_INT64;
|
||||
tag_json->value.val_array_int64.length =
|
||||
tag_value->value.value.i64s.length;
|
||||
tag_json->value.val_array_int64.i64s = tag_value->value.value.i64s.i64s;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_UINT64:
|
||||
tag_json->t = NEU_JSON_ARRAY_UINT64;
|
||||
tag_json->value.val_array_uint64.length =
|
||||
tag_value->value.value.u64s.length;
|
||||
tag_json->value.val_array_uint64.u64s =
|
||||
tag_value->value.value.u64s.u64s;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_FLOAT:
|
||||
tag_json->t = NEU_JSON_ARRAY_FLOAT;
|
||||
tag_json->value.val_array_float.length =
|
||||
tag_value->value.value.f32s.length;
|
||||
tag_json->value.val_array_float.f32s = tag_value->value.value.f32s.f32s;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_DOUBLE:
|
||||
tag_json->t = NEU_JSON_ARRAY_DOUBLE;
|
||||
tag_json->value.val_array_double.length =
|
||||
tag_value->value.value.f64s.length;
|
||||
tag_json->value.val_array_double.f64s =
|
||||
tag_value->value.value.f64s.f64s;
|
||||
break;
|
||||
case NEU_TYPE_CUSTOM:
|
||||
tag_json->t = NEU_JSON_OBJECT;
|
||||
@@ -1108,6 +1169,7 @@ neu_tag_value_to_json_paginate(neu_resp_tag_value_meta_paginate_t *tag_value,
|
||||
case NEU_TYPE_STRING:
|
||||
case NEU_TYPE_TIME:
|
||||
case NEU_TYPE_DATA_AND_TIME:
|
||||
case NEU_TYPE_ARRAY_CHAR:
|
||||
tag_json->t = NEU_JSON_STR;
|
||||
tag_json->value.val_str = tag_value->value.value.str;
|
||||
break;
|
||||
@@ -1116,9 +1178,73 @@ neu_tag_value_to_json_paginate(neu_resp_tag_value_meta_paginate_t *tag_value,
|
||||
tag_json->value.val_str = (char *) tag_value->value.value.ptr.ptr;
|
||||
break;
|
||||
case NEU_TYPE_BYTES:
|
||||
tag_json->t = NEU_JSON_BYTES;
|
||||
tag_json->value.val_bytes.length = tag_value->value.value.bytes.length;
|
||||
tag_json->value.val_bytes.bytes = tag_value->value.value.bytes.bytes;
|
||||
tag_json->t = NEU_JSON_ARRAY_UINT8;
|
||||
tag_json->value.val_array_uint8.length =
|
||||
tag_value->value.value.bytes.length;
|
||||
tag_json->value.val_array_uint8.u8s =
|
||||
tag_value->value.value.bytes.bytes;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_INT8:
|
||||
tag_json->t = NEU_JSON_ARRAY_INT8;
|
||||
tag_json->value.val_array_int8.length =
|
||||
tag_value->value.value.i8s.length;
|
||||
tag_json->value.val_array_int8.i8s = tag_value->value.value.i8s.i8s;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_INT16:
|
||||
tag_json->t = NEU_JSON_ARRAY_INT16;
|
||||
tag_json->value.val_array_int16.length =
|
||||
tag_value->value.value.i16s.length;
|
||||
tag_json->value.val_array_int16.i16s = tag_value->value.value.i16s.i16s;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_UINT16:
|
||||
tag_json->t = NEU_JSON_ARRAY_UINT16;
|
||||
tag_json->value.val_array_uint16.length =
|
||||
tag_value->value.value.u16s.length;
|
||||
tag_json->value.val_array_uint16.u16s =
|
||||
tag_value->value.value.u16s.u16s;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_INT32:
|
||||
tag_json->t = NEU_JSON_ARRAY_INT32;
|
||||
tag_json->value.val_array_int32.length =
|
||||
tag_value->value.value.i32s.length;
|
||||
tag_json->value.val_array_int32.i32s = tag_value->value.value.i32s.i32s;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_UINT32:
|
||||
tag_json->t = NEU_JSON_ARRAY_UINT32;
|
||||
tag_json->value.val_array_uint32.length =
|
||||
tag_value->value.value.u32s.length;
|
||||
tag_json->value.val_array_uint32.u32s =
|
||||
tag_value->value.value.u32s.u32s;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_INT64:
|
||||
tag_json->t = NEU_JSON_ARRAY_INT64;
|
||||
tag_json->value.val_array_int64.length =
|
||||
tag_value->value.value.i64s.length;
|
||||
tag_json->value.val_array_int64.i64s = tag_value->value.value.i64s.i64s;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_UINT64:
|
||||
tag_json->t = NEU_JSON_ARRAY_UINT64;
|
||||
tag_json->value.val_array_uint64.length =
|
||||
tag_value->value.value.u64s.length;
|
||||
tag_json->value.val_array_uint64.u64s =
|
||||
tag_value->value.value.u64s.u64s;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_FLOAT:
|
||||
tag_json->t = NEU_JSON_ARRAY_FLOAT;
|
||||
tag_json->value.val_array_float.length =
|
||||
tag_value->value.value.f32s.length;
|
||||
tag_json->value.val_array_float.f32s = tag_value->value.value.f32s.f32s;
|
||||
break;
|
||||
case NEU_TYPE_ARRAY_DOUBLE:
|
||||
tag_json->t = NEU_JSON_ARRAY_DOUBLE;
|
||||
tag_json->value.val_array_double.length =
|
||||
tag_value->value.value.f64s.length;
|
||||
tag_json->value.val_array_double.f64s =
|
||||
tag_value->value.value.f64s.f64s;
|
||||
break;
|
||||
case NEU_TYPE_CUSTOM:
|
||||
tag_json->t = NEU_JSON_OBJECT;
|
||||
tag_json->value.val_object = tag_value->value.value.json;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
+110
-17
@@ -54,7 +54,18 @@ typedef enum {
|
||||
NEU_TYPE_PTR = 19,
|
||||
NEU_TYPE_TIME = 20,
|
||||
NEU_TYPE_DATA_AND_TIME = 21,
|
||||
NEU_TYPE_CUSTOM = 22,
|
||||
NEU_TYPE_ARRAY_CHAR = 22,
|
||||
NEU_TYPE_ARRAY_INT8 = 23,
|
||||
NEU_TYPE_ARRAY_INT16 = 24,
|
||||
NEU_TYPE_ARRAY_UINT16 = 25,
|
||||
NEU_TYPE_ARRAY_INT32 = 26,
|
||||
NEU_TYPE_ARRAY_UINT32 = 27,
|
||||
NEU_TYPE_ARRAY_INT64 = 28,
|
||||
NEU_TYPE_ARRAY_UINT64 = 29,
|
||||
NEU_TYPE_ARRAY_FLOAT = 30,
|
||||
NEU_TYPE_ARRAY_DOUBLE = 31,
|
||||
NEU_TYPE_ARRAY_BOOL = 32,
|
||||
NEU_TYPE_CUSTOM = 40,
|
||||
} neu_type_e;
|
||||
|
||||
inline static const char *neu_type_string(neu_type_e type)
|
||||
@@ -102,6 +113,28 @@ inline static const char *neu_type_string(neu_type_e type)
|
||||
return "NEU_TYPE_TIME";
|
||||
case NEU_TYPE_DATA_AND_TIME:
|
||||
return "NEU_TYPE_DATA_AND_TIME";
|
||||
case NEU_TYPE_ARRAY_CHAR:
|
||||
return "NEU_TYPE_ARRAY_CHAR";
|
||||
case NEU_TYPE_ARRAY_INT8:
|
||||
return "NEU_TYPE_ARRAY_INT8";
|
||||
case NEU_TYPE_ARRAY_INT16:
|
||||
return "NEU_TYPE_ARRAY_INT16";
|
||||
case NEU_TYPE_ARRAY_UINT16:
|
||||
return "NEU_TYPE_ARRAY_UINT16";
|
||||
case NEU_TYPE_ARRAY_INT32:
|
||||
return "NEU_TYPE_ARRAY_INT32";
|
||||
case NEU_TYPE_ARRAY_UINT32:
|
||||
return "NEU_TYPE_ARRAY_UINT32";
|
||||
case NEU_TYPE_ARRAY_INT64:
|
||||
return "NEU_TYPE_ARRAY_INT64";
|
||||
case NEU_TYPE_ARRAY_UINT64:
|
||||
return "NEU_TYPE_ARRAY_UINT64";
|
||||
case NEU_TYPE_ARRAY_FLOAT:
|
||||
return "NEU_TYPE_ARRAY_FLOAT";
|
||||
case NEU_TYPE_ARRAY_DOUBLE:
|
||||
return "NEU_TYPE_ARRAY_FLOAT";
|
||||
case NEU_TYPE_ARRAY_BOOL:
|
||||
return "NEU_TYPE_ARRAY_BOOL";
|
||||
case NEU_TYPE_CUSTOM:
|
||||
return "NEU_TYPE_CUSTOM";
|
||||
}
|
||||
@@ -120,24 +153,84 @@ typedef struct {
|
||||
typedef struct {
|
||||
uint8_t bytes[NEU_VALUE_SIZE];
|
||||
uint8_t length;
|
||||
} __attribute__((packed)) neu_value_bytes_t;
|
||||
} neu_value_bytes_t;
|
||||
|
||||
typedef struct {
|
||||
int8_t i8s[NEU_VALUE_SIZE];
|
||||
uint8_t length;
|
||||
} neu_value_array_int8_t;
|
||||
|
||||
typedef struct {
|
||||
int16_t i16s[NEU_VALUE_SIZE];
|
||||
uint8_t length;
|
||||
} neu_value_array_int16_t;
|
||||
|
||||
typedef struct {
|
||||
uint16_t u16s[NEU_VALUE_SIZE];
|
||||
uint8_t length;
|
||||
} neu_value_array_uint16_t;
|
||||
|
||||
typedef struct {
|
||||
int32_t i32s[NEU_VALUE_SIZE];
|
||||
uint8_t length;
|
||||
} neu_value_array_int32_t;
|
||||
|
||||
typedef struct {
|
||||
uint32_t u32s[NEU_VALUE_SIZE];
|
||||
uint8_t length;
|
||||
} neu_value_array_uint32_t;
|
||||
|
||||
typedef struct {
|
||||
int64_t i64s[NEU_VALUE_SIZE];
|
||||
uint8_t length;
|
||||
} neu_value_array_int64_t;
|
||||
|
||||
typedef struct {
|
||||
uint64_t u64s[NEU_VALUE_SIZE];
|
||||
uint8_t length;
|
||||
} neu_value_array_uint64_t;
|
||||
|
||||
typedef struct {
|
||||
float f32s[NEU_VALUE_SIZE];
|
||||
uint8_t length;
|
||||
} neu_value_array_float_t;
|
||||
|
||||
typedef struct {
|
||||
double f64s[NEU_VALUE_SIZE];
|
||||
uint8_t length;
|
||||
} neu_value_array_double_t;
|
||||
|
||||
typedef struct {
|
||||
bool bools[NEU_VALUE_SIZE];
|
||||
uint8_t length;
|
||||
} neu_value_array_bool_t;
|
||||
|
||||
typedef union {
|
||||
bool boolean;
|
||||
int8_t i8;
|
||||
uint8_t u8;
|
||||
int16_t i16;
|
||||
uint16_t u16;
|
||||
int32_t i32;
|
||||
uint32_t u32;
|
||||
int64_t i64;
|
||||
uint64_t u64;
|
||||
float f32;
|
||||
double d64;
|
||||
char str[NEU_VALUE_SIZE];
|
||||
neu_value_bytes_t bytes;
|
||||
neu_value_ptr_t ptr;
|
||||
json_t * json;
|
||||
bool boolean;
|
||||
int8_t i8;
|
||||
uint8_t u8;
|
||||
int16_t i16;
|
||||
uint16_t u16;
|
||||
int32_t i32;
|
||||
uint32_t u32;
|
||||
int64_t i64;
|
||||
uint64_t u64;
|
||||
float f32;
|
||||
double d64;
|
||||
char str[NEU_VALUE_SIZE];
|
||||
neu_value_bytes_t bytes;
|
||||
neu_value_ptr_t ptr;
|
||||
json_t * json;
|
||||
neu_value_array_int8_t i8s;
|
||||
neu_value_array_int16_t i16s;
|
||||
neu_value_array_uint16_t u16s;
|
||||
neu_value_array_int32_t i32s;
|
||||
neu_value_array_uint32_t u32s;
|
||||
neu_value_array_int64_t i64s;
|
||||
neu_value_array_uint64_t u64s;
|
||||
neu_value_array_float_t f32s;
|
||||
neu_value_array_double_t f64s;
|
||||
neu_value_array_bool_t bools;
|
||||
} neu_value_u;
|
||||
|
||||
static inline char *neu_value_str(neu_type_e type, neu_value_u value)
|
||||
|
||||
Reference in New Issue
Block a user