dscrd
Discord C library
Data Structures | Macros | Typedefs | Enumerations | Functions
dscrd_i.h File Reference
#include <jansson.h>
#include <stddef.h>
#include <stdalign.h>
#include <stdbool.h>
Include dependency graph for dscrd_i.h:

Go to the source code of this file.

Data Structures

struct  RestResp_s
 Rest Response structure. More...
 
struct  jsonToStruct_element_s
 jsonToStruct element structure More...
 
struct  jsonToStruct_element_custom_s
 
struct  jsonToStruct_custom_s
 jsonToStruct_custom structure More...
 
struct  jsonToStruct_s
 jsonToStruct structure (array) More...
 

Macros

#define PTR(X, Y)   ((X *) Y)
 
#define NO_GATEWAY_RET()   if(!dscrd_has_gateway()){dscrd_error_set ("This library has no gateway support."); return -1;}
 
#define NO_GATEWAY_RET_P()   if(!dscrd_has_gateway()){dscrd_error_set ("This library has no gateway support."); return NULL;}
 
#define JTS_STRINGIFY(x)   #x
 
#define JTS_TOSTRING(x)   JTS_STRINGIFY(x)
 
#define JTS_NAME(x)   jts_ ##x
 
#define JTS_CUST_NAME(x)   jts_ext_ ##x
 
#define JTS_CHAR   0
 
#define JTS_CHARP   1
 
#define JTS_INT   2
 
#define JTS_UCHAR   3
 
#define JTS_CHARPP   4
 
#define JTS_CUST   7
 
#define JTS_BOOL   8
 
#define JTS_INTP   9
 
#define JTS_FLOAT   10
 
#define JTS_FLOATP   11
 
#define JTS_DOUBLE   12
 
#define JTS_DOUBLEP   13
 
#define JTS_ELEMENT_C(G, X, Y)
 
#define JTS_ELEMENT(X, Y)
 
#define JTS_ELEMENTT(G, X, Y)
 
#define JTS_TYPE(T)
 
#define JTS_T_D   0
 
#define JTS_T_P   1
 
#define JTS_T_PP   2
 
#define JTS_T_U   3
 
#define JTS_TYPE_P(P, T)
 
#define JTS_STRINGIZE(arg)   JTS_STRINGIZE1(arg)
 
#define JTS_STRINGIZE1(arg)   JTS_STRINGIZE2(arg)
 
#define JTS_STRINGIZE2(arg)   #arg
 
#define JTS_CONCATENATE(arg1, arg2)   JTS_CONCATENATE1(arg1, arg2)
 
#define JTS_CONCATENATE1(arg1, arg2)   JTS_CONCATENATE2(arg1, arg2)
 
#define JTS_CONCATENATE2(arg1, arg2)   arg1##arg2
 
#define JTS_E_FOR_EACH_1(what, x, y)   what(x, y)
 
#define JTS_E_FOR_EACH_2(what, x, y, ...)
 
#define JTS_E_FOR_EACH_3(what, x, y, ...)
 
#define JTS_E_FOR_EACH_4(what, x, y, ...)
 
#define JTS_E_FOR_EACH_5(what, x, y, ...)
 
#define JTS_E_FOR_EACH_6(what, x, y, ...)
 
#define JTS_E_FOR_EACH_7(what, x, y, ...)
 
#define JTS_E_FOR_EACH_8(what, x, y, ...)
 
#define JTS_E_FOR_EACH_9(what, x, y, ...)
 
#define JTS_E_FOR_EACH_10(what, x, y, ...)
 
#define JTS_E_FOR_EACH_11(what, x, y, ...)
 
#define JTS_E_FOR_EACH_12(what, x, y, ...)
 
#define JTS_E_FOR_EACH_13(what, x, y, ...)
 
#define JTS_E_FOR_EACH_14(what, x, y, ...)
 
#define JTS_E_FOR_EACH_15(what, x, y, ...)
 
#define JTS_E_FOR_EACH_16(what, x, y, ...)
 
#define JTS_E_FOR_EACH_17(what, x, y, ...)
 
#define JTS_E_FOR_EACH_18(what, x, y, ...)
 
#define JTS_E_FOR_EACH_19(what, x, y, ...)
 
#define JTS_E_FOR_EACH_20(what, x, y, ...)
 
#define JTS_EX_FOR_EACH_2(what, g, x, y)   what(g, x, y)
 
#define JTS_EX_FOR_EACH_4(what, g, x, y, ...)
 
#define JTS_EX_FOR_EACH_6(what, g, x, y, ...)
 
#define JTS_EX_FOR_EACH_8(what, g, x, y, ...)
 
#define JTS_PPNARG(...)   JTS_PPNARG_(__VA_ARGS__,JTS_PPRSEQ_N())
 
#define JTS_PPNARG_(...)   JTS_PPARG_N(__VA_ARGS__)
 
#define JTS_PPARG_N(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, N, ...)   N
 
#define JTS_PPRSEQ_N()
 
#define JTS_D(X, ...)
 
#define JTS_D_EX(X, ...)
 
#define JTS_E(X)   extern jsonToStruct JTS_NAME(X);
 
#define JTS_E_EX(X)   extern jsonToStruct_custom JTS_CUST_NAME(X);
 
#define JTS(X, Y)   (X *) jts_structify (&JTS_NAME(X), Y, (jsonToStruct_custom *) 0)
 
#define JTS_EX(X, Y)   (X *) jts_structify (&JTS_NAME(X), Y, &JTS_CUST_NAME(X))
 
#define JTS_FREE(X, Y)   jts_structify_reverse (&JTS_NAME(X), Y, (jsonToStruct_custom *) 0)
 
#define JTS_EX_FREE(X, Y)   jts_structify_reverse (&JTS_NAME(X), Y, &JTS_CUST_NAME(X))
 
#define STJ(X, Y)   stj_jsonify (&JTS_NAME(X), Y)
 
#define STJ_FREE(X)   free(X)
 
#define STJ_L(X, ...)   stj_jsonify_list (&JTS_NAME(X), JTS_PPNARG(__VA_ARGS__)/2, __VA_ARGS__)
 

Typedefs

typedef enum dscrd_event_e dscrd_event
 
typedef struct RestResp_s RestResp
 Rest Response structure. More...
 
typedef struct jsonToStruct_element_s jsonToStruct_element
 jsonToStruct element structure More...
 
typedef struct jsonToStruct_element_custom_s jsonToStruct_element_custom
 
typedef struct jsonToStruct_custom_s jsonToStruct_custom
 jsonToStruct_custom structure More...
 
typedef struct jsonToStruct_s jsonToStruct
 jsonToStruct structure (array) More...
 

Enumerations

enum  dscrd_event_e { CREATE, DESTROY }
 

Functions

const char * dscrd_user_status_str (int status)
 todo More...
 
void dscrd_client_process (DiscordClient *client, dscrd_type type, int event)
 
void dscrd_rest_error_parse (int code, const char *body)
 
void dscrd_error_set (const char *fmt,...)
 
void dscrd_error_set_detailed (const char *fmt,...)
 
void DscrdFile_data (DscrdFile *file)
 
void DscrdFile_data_base64 (DscrdFile *file)
 
void DscrdFile_data_enc (DscrdFile *file)
 
int is_DscrdFile_real (DscrdFile *file)
 
void * json_discordobject (DiscordClient *client, dscrd_type type, char *json)
 
WebhookListjson_WebhookList (DiscordClient *client, char *json)
 
DiscordGuild ** json_DiscordGuilds (DiscordClient *client, char *json)
 
DiscordChannelListjson_DiscordChannelList (DiscordClient *client, char *json)
 
void * DiscordGateway_open (DiscordClient *client)
 
void DiscordGateway_close (DiscordClient *client)
 
void DiscordGateway_send (DiscordClient *client, const char *message)
 
void DiscordGateway_callback_remove (void *gateway, int i)
 
void * Rest_init (const char *host, int port)
 
void Rest_free (void *rest)
 
RestRespRest_call (DiscordClient *client, const char *path, unsigned char method, const char *body)
 
void Rest_call_free (RestResp *res)
 
void * jts_structify_jp (const jsonToStruct *jts, json_t *root, jsonToStruct_custom *customdef)
 
void * jts_structify (const jsonToStruct *jts, const char *json_data, jsonToStruct_custom *customdef)
 
void jts_structify_reverse (const jsonToStruct *jts, void *structure, jsonToStruct_custom *customdef)
 
char * stj_jsonify (const jsonToStruct *jts, void *ptr)
 
char * stj_jsonify_list (const jsonToStruct *jts, int num,...)
 
 JTS_E (DiscordUser)
 
 JTS_E (Webhook)
 
 JTS_E_EX (Webhook)
 
 JTS_E (DiscordChannel)
 
 JTS_E (DiscordGuild)
 
 JTS_E (DiscordChannelList)
 
 JTS_E_EX (DiscordChannelList)
 
 JTS_E (DiscordMessage)
 
 JTS_E_EX (DiscordMessage)
 

Macro Definition Documentation

◆ JTS

#define JTS (   X,
 
)    (X *) jts_structify (&JTS_NAME(X), Y, (jsonToStruct_custom *) 0)

Convert json data string into mentioned and predefined structure.

Parameters
XName of the datatype
Ypointer to json data string
Returns
pointer to X with filled data
See also
JTS_FREE() - freeing function
JTS_EX() - extended jts

◆ JTS_BOOL

#define JTS_BOOL   8

◆ JTS_CHAR

#define JTS_CHAR   0

◆ JTS_CHARP

#define JTS_CHARP   1

◆ JTS_CHARPP

#define JTS_CHARPP   4

◆ JTS_CONCATENATE

#define JTS_CONCATENATE (   arg1,
  arg2 
)    JTS_CONCATENATE1(arg1, arg2)

◆ JTS_CONCATENATE1

#define JTS_CONCATENATE1 (   arg1,
  arg2 
)    JTS_CONCATENATE2(arg1, arg2)

◆ JTS_CONCATENATE2

#define JTS_CONCATENATE2 (   arg1,
  arg2 
)    arg1##arg2

◆ JTS_CUST

#define JTS_CUST   7

◆ JTS_CUST_NAME

#define JTS_CUST_NAME (   x)    jts_ext_ ##x

◆ JTS_D

#define JTS_D (   X,
  ... 
)
Value:
(const jsonToStruct_element *[]) {JTS_CONCATENATE(JTS_E_FOR_EACH_, JTS_PPNARG(__VA_ARGS__)) (JTS_ELEMENT, X, __VA_ARGS__) NULL }, \
sizeof(X),\
JTS_TOSTRING(X)\
};
#define JTS_ELEMENT(X, Y)
Definition: dscrd_i.h:296
#define JTS_CONCATENATE(arg1, arg2)
Definition: dscrd_i.h:343
#define JTS_NAME(x)
Definition: dscrd_i.h:213
jsonToStruct structure (array)
Definition: dscrd_i.h:263
#define JTS_PPNARG(...)
Definition: dscrd_i.h:423
jsonToStruct element structure
Definition: dscrd_i.h:231

Create new jsonToStruct data definition

Parameters
XName of the datatype
...list of datatype elements to process

◆ JTS_D_EX

#define JTS_D_EX (   X,
  ... 
)
Value:
(const jsonToStruct_element_custom *[]) {JTS_CONCATENATE(JTS_EX_FOR_EACH_, JTS_PPNARG(__VA_ARGS__)) (JTS_ELEMENT_C, X, __VA_ARGS__) NULL } \
}
#define JTS_CONCATENATE(arg1, arg2)
Definition: dscrd_i.h:343
#define JTS_ELEMENT_C(G, X, Y)
Definition: dscrd_i.h:288
Definition: dscrd_i.h:241
jsonToStruct_custom structure
Definition: dscrd_i.h:254
#define JTS_CUST_NAME(x)
Definition: dscrd_i.h:214
#define JTS_PPNARG(...)
Definition: dscrd_i.h:423

Create new jsonToStruct custom datatype definition

Parameters
XName of the datatype
...list of custom datatype elements in for of two: DATATYPE_NAME, DATATYPE
Note
specified datatypes have to be declared before with JTS()

◆ JTS_DOUBLE

#define JTS_DOUBLE   12

◆ JTS_DOUBLEP

#define JTS_DOUBLEP   13

◆ JTS_E

#define JTS_E (   X)    extern jsonToStruct JTS_NAME(X);

Reference exiting jsonToStruct data definition

Parameters
XName of the datatype

◆ JTS_E_EX

#define JTS_E_EX (   X)    extern jsonToStruct_custom JTS_CUST_NAME(X);

Reference exiting jsonToStruct extention definition

Parameters
XName of the datatype

◆ JTS_E_FOR_EACH_1

#define JTS_E_FOR_EACH_1 (   what,
  x,
 
)    what(x, y)

◆ JTS_E_FOR_EACH_10

#define JTS_E_FOR_EACH_10 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_9(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_11

#define JTS_E_FOR_EACH_11 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_10(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_12

#define JTS_E_FOR_EACH_12 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_11(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_13

#define JTS_E_FOR_EACH_13 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_12(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_14

#define JTS_E_FOR_EACH_14 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_13(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_15

#define JTS_E_FOR_EACH_15 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_14(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_16

#define JTS_E_FOR_EACH_16 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_15(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_17

#define JTS_E_FOR_EACH_17 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_16(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_18

#define JTS_E_FOR_EACH_18 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_17(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_19

#define JTS_E_FOR_EACH_19 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_18(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_2

#define JTS_E_FOR_EACH_2 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_1(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_20

#define JTS_E_FOR_EACH_20 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_19(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_3

#define JTS_E_FOR_EACH_3 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_2(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_4

#define JTS_E_FOR_EACH_4 (   what,
  x,
  y,
  ... 
)
Value:
what(x,y)\
JTS_E_FOR_EACH_3(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_5

#define JTS_E_FOR_EACH_5 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_4(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_6

#define JTS_E_FOR_EACH_6 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_5(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_7

#define JTS_E_FOR_EACH_7 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_6(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_8

#define JTS_E_FOR_EACH_8 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_7(what, x, __VA_ARGS__)

◆ JTS_E_FOR_EACH_9

#define JTS_E_FOR_EACH_9 (   what,
  x,
  y,
  ... 
)
Value:
what(x, y)\
JTS_E_FOR_EACH_8(what, x, __VA_ARGS__)

◆ JTS_ELEMENT

#define JTS_ELEMENT (   X,
 
)
Value:
.name = JTS_TOSTRING(Y), \
.offset = offsetof(X, Y), \
.align = alignof(((X *)0)->Y), \
.size = sizeof( ((X *)0)->Y), \
.data_type = JTS_TYPE(((X *)0)->Y) \
},
#define JTS_TYPE(T)
Definition: dscrd_i.h:314
#define JTS_TOSTRING(x)
Definition: dscrd_i.h:212
struct jsonToStruct_element_s jsonToStruct_element
jsonToStruct element structure

◆ JTS_ELEMENT_C

#define JTS_ELEMENT_C (   G,
  X,
 
)
Value:
.name = (const char *) JTS_TOSTRING(X), \
.pointer_type = JTS_TYPE_P(Y, ((G *)0)->X), \
.jts_cust = & JTS_NAME(Y), \
.pp = JTS_TYPE_P(Y, ((G *)0)->X) \
},
#define JTS_NAME(x)
Definition: dscrd_i.h:213
#define JTS_TOSTRING(x)
Definition: dscrd_i.h:212
struct jsonToStruct_element_custom_s jsonToStruct_element_custom
#define JTS_TYPE_P(P, T)
Definition: dscrd_i.h:333

◆ JTS_ELEMENTT

#define JTS_ELEMENTT (   G,
  X,
 
)
Value:
.name = JTS_TOSTRING(Y), \
.offset = offsetof(X, Y), \
.size = sizeof( ((X *)0)->Y), \
.data_type = JTS_TYPE(((X *)0)->Y), \
.pp = JTS_TYPE_P( ((G *)0)->X) \
},
#define JTS_TYPE(T)
Definition: dscrd_i.h:314
#define JTS_TOSTRING(x)
Definition: dscrd_i.h:212
struct jsonToStruct_element_s jsonToStruct_element
jsonToStruct element structure
#define JTS_TYPE_P(P, T)
Definition: dscrd_i.h:333

◆ JTS_EX

#define JTS_EX (   X,
 
)    (X *) jts_structify (&JTS_NAME(X), Y, &JTS_CUST_NAME(X))

Convert json data string into mentioned and predefined structure. In comparison to JTS() this function requires that given datatype has its extention defined (see JTS_D_EX())

Parameters
XName of the datatype
Ypointer to json data string
Returns
pointer to X with filled data
See also
JTS_FREE_EX() - extended freeing function

◆ JTS_EX_FOR_EACH_2

#define JTS_EX_FOR_EACH_2 (   what,
  g,
  x,
 
)    what(g, x, y)

◆ JTS_EX_FOR_EACH_4

#define JTS_EX_FOR_EACH_4 (   what,
  g,
  x,
  y,
  ... 
)
Value:
what(g, x,y)\
JTS_EX_FOR_EACH_2(what, g, __VA_ARGS__)

◆ JTS_EX_FOR_EACH_6

#define JTS_EX_FOR_EACH_6 (   what,
  g,
  x,
  y,
  ... 
)
Value:
what(g, x, y)\
JTS_EX_FOR_EACH_4(what, g, __VA_ARGS__)

◆ JTS_EX_FOR_EACH_8

#define JTS_EX_FOR_EACH_8 (   what,
  g,
  x,
  y,
  ... 
)
Value:
what(g, x, y)\
JTS_EX_FOR_EACH_6(what, g, __VA_ARGS__)

◆ JTS_EX_FREE

#define JTS_EX_FREE (   X,
 
)    jts_structify_reverse (&JTS_NAME(X), Y, &JTS_CUST_NAME(X))

Free data allocated by JTS_EX().

Parameters
XName of the datatype
Ypointer to datatype
See also
JTS_FREE - normal freeing function

◆ JTS_FLOAT

#define JTS_FLOAT   10

◆ JTS_FLOATP

#define JTS_FLOATP   11

◆ JTS_FREE

#define JTS_FREE (   X,
 
)    jts_structify_reverse (&JTS_NAME(X), Y, (jsonToStruct_custom *) 0)

Free data allocated by JTS().

Parameters
XName of the datatype
Ypointer to datatype
See also
JTS_EX_FREE - extended freeing function

◆ JTS_INT

#define JTS_INT   2

◆ JTS_INTP

#define JTS_INTP   9

◆ JTS_NAME

#define JTS_NAME (   x)    jts_ ##x

◆ JTS_PPARG_N

#define JTS_PPARG_N (   _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11,
  _12,
  _13,
  _14,
  _15,
  _16,
  _17,
  _18,
  _19,
  _20,
  _21,
  _22,
  _23,
  _24,
  _25,
  _26,
  _27,
  _28,
  _29,
  _30,
  _31,
  _32,
  _33,
  _34,
  _35,
  _36,
  _37,
  _38,
  _39,
  _40,
  _41,
  _42,
  _43,
  _44,
  _45,
  _46,
  _47,
  _48,
  _49,
  _50,
  _51,
  _52,
  _53,
  _54,
  _55,
  _56,
  _57,
  _58,
  _59,
  _60,
  _61,
  _62,
  _63,
  N,
  ... 
)    N

◆ JTS_PPNARG

#define JTS_PPNARG (   ...)    JTS_PPNARG_(__VA_ARGS__,JTS_PPRSEQ_N())

◆ JTS_PPNARG_

#define JTS_PPNARG_ (   ...)    JTS_PPARG_N(__VA_ARGS__)

◆ JTS_PPRSEQ_N

#define JTS_PPRSEQ_N ( )
Value:
63,62,61,60, \
59,58,57,56,55,54,53,52,51,50, \
49,48,47,46,45,44,43,42,41,40, \
39,38,37,36,35,34,33,32,31,30, \
29,28,27,26,25,24,23,22,21,20, \
19,18,17,16,15,14,13,12,11,10, \
9,8,7,6,5,4,3,2,1,0

◆ JTS_STRINGIFY

#define JTS_STRINGIFY (   x)    #x

◆ JTS_STRINGIZE

#define JTS_STRINGIZE (   arg)    JTS_STRINGIZE1(arg)

◆ JTS_STRINGIZE1

#define JTS_STRINGIZE1 (   arg)    JTS_STRINGIZE2(arg)

◆ JTS_STRINGIZE2

#define JTS_STRINGIZE2 (   arg)    #arg

◆ JTS_T_D

#define JTS_T_D   0

◆ JTS_T_P

#define JTS_T_P   1

◆ JTS_T_PP

#define JTS_T_PP   2

◆ JTS_T_U

#define JTS_T_U   3

◆ JTS_TOSTRING

#define JTS_TOSTRING (   x)    JTS_STRINGIFY(x)

◆ JTS_TYPE

#define JTS_TYPE (   T)
Value:
_Generic( (T), \
char: JTS_CHAR, \
char *: JTS_CHARP, \
int: JTS_INT, \
unsigned char: JTS_UCHAR, \
char **: JTS_CHARPP, \
bool: JTS_BOOL, \
int *: JTS_INTP, \
float: JTS_FLOAT, \
float*: JTS_FLOATP,\
double: JTS_DOUBLE, \
double*: JTS_DOUBLEP,\
default: JTS_CUST)
#define JTS_CUST
Definition: dscrd_i.h:279
#define JTS_DOUBLE
Definition: dscrd_i.h:284
#define JTS_DOUBLEP
Definition: dscrd_i.h:285
#define JTS_FLOATP
Definition: dscrd_i.h:283
#define JTS_CHARP
Definition: dscrd_i.h:273
#define JTS_CHAR
Definition: dscrd_i.h:272
#define JTS_INTP
Definition: dscrd_i.h:281
#define JTS_BOOL
Definition: dscrd_i.h:280
#define JTS_INT
Definition: dscrd_i.h:274
#define JTS_UCHAR
Definition: dscrd_i.h:275
#define JTS_CHARPP
Definition: dscrd_i.h:276
#define JTS_FLOAT
Definition: dscrd_i.h:282

◆ JTS_TYPE_P

#define JTS_TYPE_P (   P,
 
)
Value:
_Generic( (T), \
P: JTS_T_D, \
P *: JTS_T_P, \
P **: JTS_T_PP, \
default: JTS_T_U)
#define JTS_T_P
Definition: dscrd_i.h:329
#define JTS_T_PP
Definition: dscrd_i.h:330
#define JTS_T_D
Definition: dscrd_i.h:328
#define JTS_T_U
Definition: dscrd_i.h:331

◆ JTS_UCHAR

#define JTS_UCHAR   3

◆ NO_GATEWAY_RET

#define NO_GATEWAY_RET ( )    if(!dscrd_has_gateway()){dscrd_error_set ("This library has no gateway support."); return -1;}

◆ NO_GATEWAY_RET_P

#define NO_GATEWAY_RET_P ( )    if(!dscrd_has_gateway()){dscrd_error_set ("This library has no gateway support."); return NULL;}

◆ PTR

#define PTR (   X,
 
)    ((X *) Y)

Dereference void pointer

Parameters
Xpointer type
Ypointer name

◆ STJ

#define STJ (   X,
 
)    stj_jsonify (&JTS_NAME(X), Y)

Converts pointer of previously defined datatype into json datastring.

Parameters
XName of the datatype
YPointer to the datatype
Returns
json-formated string on success
NULL on failure
See also
STJ_FREE - same as free()

◆ STJ_FREE

#define STJ_FREE (   X)    free(X)

Frees pointer allocated by STJ().

This function is equal to free().

see STJ()

◆ STJ_L

#define STJ_L (   X,
  ... 
)    stj_jsonify_list (&JTS_NAME(X), JTS_PPNARG(__VA_ARGS__)/2, __VA_ARGS__)

Converts va_args into json datastring. Va_args have to be formulated in pairs of string and datapointer (void *).

Parameters
XName of the datatype
...va_arg list
Returns
json-formated string on success
NULL on failure
See also
STJ_FREE - same as free()
Todo:
update

Typedef Documentation

◆ dscrd_event

typedef enum dscrd_event_e dscrd_event

◆ jsonToStruct

typedef struct jsonToStruct_s jsonToStruct

jsonToStruct structure (array)

◆ jsonToStruct_custom

jsonToStruct_custom structure

Here goes all external definitions.

◆ jsonToStruct_element

jsonToStruct element structure

◆ jsonToStruct_element_custom

◆ RestResp

typedef struct RestResp_s RestResp

Rest Response structure.

Previously used RestResponse directly from rest-client-c library but now it's made API independent.

Enumeration Type Documentation

◆ dscrd_event_e

Enumerator
CREATE 
DESTROY 

Function Documentation

◆ DiscordGateway_callback_remove()

void DiscordGateway_callback_remove ( void *  gateway,
int  i 
)

◆ DiscordGateway_close()

void DiscordGateway_close ( DiscordClient client)

◆ DiscordGateway_open()

void* DiscordGateway_open ( DiscordClient client)

◆ DiscordGateway_send()

void DiscordGateway_send ( DiscordClient client,
const char *  message 
)

◆ dscrd_client_process()

void dscrd_client_process ( DiscordClient client,
dscrd_type  type,
int  event 
)

Process client for specified event like object creation or deletion. Currently this is used for:

  • incrementing/decreasing refcount for specified objects
  • destroying temporary DiscordClient
Parameters
clientDiscord session, can be NULL
typedscrd_type of event
eventdscrd_event, for now either CREATE or DESTROY

◆ dscrd_error_set()

void dscrd_error_set ( const char *  fmt,
  ... 
)

Sets formatted data to error string. (printf format)

Parameters
fmtstring with or without format specifiers
...sequence of additional arguments

◆ dscrd_error_set_detailed()

void dscrd_error_set_detailed ( const char *  fmt,
  ... 
)

Prefixes current error with given formatted data. (printf format)

Parameters
fmtstring with or without format specifiers
...sequence of additional arguments

◆ dscrd_rest_error_parse()

void dscrd_rest_error_parse ( int  code,
const char *  body 
)

Process rest error response and set human readable message. Only called from rest.c when HTTP response is in 4XX row. At the time of writing only Bad Request (400) error is parsed.

Parameters
codeHTTP response code
bodyraw response data

◆ dscrd_user_status_str()

const char* dscrd_user_status_str ( int  status)

todo

◆ DscrdFile_data()

void DscrdFile_data ( DscrdFile file)

Ensures file data is loaded into memory.

Parameters
fileDscrdFile

◆ DscrdFile_data_base64()

void DscrdFile_data_base64 ( DscrdFile file)

Ensures base64 file data is loaded into memory.

Parameters
fileDscrdFile

◆ DscrdFile_data_enc()

void DscrdFile_data_enc ( DscrdFile file)

Ensures encoded file data is loaded into memory.

Parameters
fileDscrdFile

◆ is_DscrdFile_real()

int is_DscrdFile_real ( DscrdFile file)

Checks if DscrdFile is an existent file.

Parameters
fileDscrdFile
Returns
1 if DscrdFile refers to a file
0 if DscrdFile does not refer to a file and indicates no file (DSCRD_FILE_NULL)
See also
DSCRD_FILE_NULL

◆ json_DiscordChannelList()

DiscordChannelList* json_DiscordChannelList ( DiscordClient client,
char *  json 
)

◆ json_DiscordGuilds()

DiscordGuild** json_DiscordGuilds ( DiscordClient client,
char *  json 
)

◆ json_discordobject()

void* json_discordobject ( DiscordClient client,
dscrd_type  type,
char *  json 
)

Parse json string into object based on given dscrd_type

Parameters
clientDiscord session
typedscrd_type object
jsonjson string
Returns
pointer to object

◆ json_WebhookList()

WebhookList* json_WebhookList ( DiscordClient client,
char *  json 
)

Parse json string into WebhookList object

Parameters
clientDiscord session
jsonjson string
Returns
WebhookList pointer
Todo:
migrate into json_discordobject

◆ JTS_E() [1/6]

JTS_E ( DiscordUser  )

◆ JTS_E() [2/6]

JTS_E ( Webhook  )

◆ JTS_E() [3/6]

JTS_E ( DiscordChannel  )

◆ JTS_E() [4/6]

JTS_E ( DiscordGuild  )

◆ JTS_E() [5/6]

JTS_E ( DiscordChannelList  )

◆ JTS_E() [6/6]

JTS_E ( DiscordMessage  )

◆ JTS_E_EX() [1/3]

JTS_E_EX ( Webhook  )

◆ JTS_E_EX() [2/3]

JTS_E_EX ( DiscordChannelList  )

◆ JTS_E_EX() [3/3]

JTS_E_EX ( DiscordMessage  )

◆ jts_structify()

void* jts_structify ( const jsonToStruct jts,
const char *  json_data,
jsonToStruct_custom customdef 
)

◆ jts_structify_jp()

void* jts_structify_jp ( const jsonToStruct jts,
json_t *  root,
jsonToStruct_custom customdef 
)

◆ jts_structify_reverse()

void jts_structify_reverse ( const jsonToStruct jts,
void *  structure,
jsonToStruct_custom customdef 
)

◆ Rest_call()

RestResp* Rest_call ( DiscordClient client,
const char *  path,
unsigned char  method,
const char *  body 
)

Makes a REST call. Returned pointer has to be freed with Rest_call_free.

Parameters
clientDiscordClient session
pathAPI path
methodHTTP method, one of http_method
bodydata to send
Returns
pointer to RestResp on success
NULL on failure

◆ Rest_call_free()

void Rest_call_free ( RestResp res)

Frees pointer allocated by Rest_call.

Parameters
resRest response structure (RestResp)

◆ Rest_free()

void Rest_free ( void *  rest)

Frees pointer allocated by Rest_init.

Parameters
restRest library access pointer

◆ Rest_init()

void* Rest_init ( const char *  host,
int  port 
)

Allocates Rest library access pointer.

Parameters
hostaddress of the host to connect
portport to connect

◆ stj_jsonify()

char* stj_jsonify ( const jsonToStruct jts,
void *  ptr 
)

◆ stj_jsonify_list()

char* stj_jsonify_list ( const jsonToStruct jts,
int  num,
  ... 
)