73 #define PTR(X,Y) ((X *) Y) 75 #define NO_GATEWAY_RET() if(!dscrd_has_gateway()){dscrd_error_set ("This library has no gateway support."); return -1;} 77 #define NO_GATEWAY_RET_P() if(!dscrd_has_gateway()){dscrd_error_set ("This library has no gateway support."); return NULL;} 180 void *
Rest_init (
const char *host,
int port);
211 #define JTS_STRINGIFY(x) #x 212 #define JTS_TOSTRING(x) JTS_STRINGIFY(x) 213 #define JTS_NAME(x) jts_ ##x 214 #define JTS_CUST_NAME(x) jts_ext_ ##x 219 #include <stdalign.h> 272 #define JTS_CHAR 0 // unable to detect with gcc (for now) 273 #define JTS_CHARP 1 // character pointer 283 #define JTS_FLOATP 11 284 #define JTS_DOUBLE 12 285 #define JTS_DOUBLEP 13 288 #define JTS_ELEMENT_C(G, X, Y) \ 289 &(jsonToStruct_element_custom) { \ 290 .name = (const char *) JTS_TOSTRING(X), \ 291 .pointer_type = JTS_TYPE_P(Y, ((G *)0)->X), \ 292 .jts_cust = & JTS_NAME(Y), \ 293 .pp = JTS_TYPE_P(Y, ((G *)0)->X) \ 296 #define JTS_ELEMENT(X, Y) \ 297 &(jsonToStruct_element) { \ 298 .name = JTS_TOSTRING(Y), \ 299 .offset = offsetof(X, Y), \ 300 .align = alignof(((X *)0)->Y), \ 301 .size = sizeof( ((X *)0)->Y), \ 302 .data_type = JTS_TYPE(((X *)0)->Y) \ 305 #define JTS_ELEMENTT(G, X, Y) \ 306 &(jsonToStruct_element) { \ 307 .name = JTS_TOSTRING(Y), \ 308 .offset = offsetof(X, Y), \ 309 .size = sizeof( ((X *)0)->Y), \ 310 .data_type = JTS_TYPE(((X *)0)->Y), \ 311 .pp = JTS_TYPE_P( ((G *)0)->X) \ 314 #define JTS_TYPE(T) _Generic( (T), \ 318 unsigned char: JTS_UCHAR, \ 319 char **: JTS_CHARPP, \ 324 double: JTS_DOUBLE, \ 325 double*: JTS_DOUBLEP,\ 333 #define JTS_TYPE_P(P,T) _Generic( (T), \ 339 #define JTS_STRINGIZE(arg) JTS_STRINGIZE1(arg) 340 #define JTS_STRINGIZE1(arg) JTS_STRINGIZE2(arg) 341 #define JTS_STRINGIZE2(arg) #arg 343 #define JTS_CONCATENATE(arg1, arg2) JTS_CONCATENATE1(arg1, arg2) 344 #define JTS_CONCATENATE1(arg1, arg2) JTS_CONCATENATE2(arg1, arg2) 345 #define JTS_CONCATENATE2(arg1, arg2) arg1##arg2 347 #define JTS_E_FOR_EACH_1(what, x, y)\ 349 #define JTS_E_FOR_EACH_2(what, x, y, ...)\ 351 JTS_E_FOR_EACH_1(what, x, __VA_ARGS__) 352 #define JTS_E_FOR_EACH_3(what, x, y, ...)\ 354 JTS_E_FOR_EACH_2(what, x, __VA_ARGS__) 355 #define JTS_E_FOR_EACH_4(what, x, y, ...)\ 357 JTS_E_FOR_EACH_3(what, x, __VA_ARGS__) 358 #define JTS_E_FOR_EACH_5(what, x, y, ...)\ 360 JTS_E_FOR_EACH_4(what, x, __VA_ARGS__) 361 #define JTS_E_FOR_EACH_6(what, x, y, ...)\ 363 JTS_E_FOR_EACH_5(what, x, __VA_ARGS__) 364 #define JTS_E_FOR_EACH_7(what, x, y, ...)\ 366 JTS_E_FOR_EACH_6(what, x, __VA_ARGS__) 367 #define JTS_E_FOR_EACH_8(what, x, y, ...)\ 369 JTS_E_FOR_EACH_7(what, x, __VA_ARGS__) 370 #define JTS_E_FOR_EACH_9(what, x, y, ...)\ 372 JTS_E_FOR_EACH_8(what, x, __VA_ARGS__) 373 #define JTS_E_FOR_EACH_10(what, x, y, ...)\ 375 JTS_E_FOR_EACH_9(what, x, __VA_ARGS__) 376 #define JTS_E_FOR_EACH_11(what, x, y, ...)\ 378 JTS_E_FOR_EACH_10(what, x, __VA_ARGS__) 379 #define JTS_E_FOR_EACH_12(what, x, y, ...)\ 381 JTS_E_FOR_EACH_11(what, x, __VA_ARGS__) 382 #define JTS_E_FOR_EACH_13(what, x, y, ...)\ 384 JTS_E_FOR_EACH_12(what, x, __VA_ARGS__) 385 #define JTS_E_FOR_EACH_14(what, x, y, ...)\ 387 JTS_E_FOR_EACH_13(what, x, __VA_ARGS__) 388 #define JTS_E_FOR_EACH_15(what, x, y, ...)\ 390 JTS_E_FOR_EACH_14(what, x, __VA_ARGS__) 391 #define JTS_E_FOR_EACH_16(what, x, y, ...)\ 393 JTS_E_FOR_EACH_15(what, x, __VA_ARGS__) 394 #define JTS_E_FOR_EACH_17(what, x, y, ...)\ 396 JTS_E_FOR_EACH_16(what, x, __VA_ARGS__) 397 #define JTS_E_FOR_EACH_18(what, x, y, ...)\ 399 JTS_E_FOR_EACH_17(what, x, __VA_ARGS__) 400 #define JTS_E_FOR_EACH_19(what, x, y, ...)\ 402 JTS_E_FOR_EACH_18(what, x, __VA_ARGS__) 403 #define JTS_E_FOR_EACH_20(what, x, y, ...)\ 405 JTS_E_FOR_EACH_19(what, x, __VA_ARGS__) 409 #define JTS_EX_FOR_EACH_2(what, g, x, y)\ 412 #define JTS_EX_FOR_EACH_4(what, g, x, y, ...)\ 414 JTS_EX_FOR_EACH_2(what, g, __VA_ARGS__) 415 #define JTS_EX_FOR_EACH_6(what, g, x, y, ...)\ 417 JTS_EX_FOR_EACH_4(what, g, __VA_ARGS__) 418 #define JTS_EX_FOR_EACH_8(what, g, x, y, ...)\ 420 JTS_EX_FOR_EACH_6(what, g, __VA_ARGS__) 423 #define JTS_PPNARG(...) \ 424 JTS_PPNARG_(__VA_ARGS__,JTS_PPRSEQ_N()) 425 #define JTS_PPNARG_(...) \ 426 JTS_PPARG_N(__VA_ARGS__) 427 #define JTS_PPARG_N( \ 428 _1, _2, _3, _4, _5, _6, _7, _8, _9,_10, \ 429 _11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \ 430 _21,_22,_23,_24,_25,_26,_27,_28,_29,_30, \ 431 _31,_32,_33,_34,_35,_36,_37,_38,_39,_40, \ 432 _41,_42,_43,_44,_45,_46,_47,_48,_49,_50, \ 433 _51,_52,_53,_54,_55,_56,_57,_58,_59,_60, \ 435 #define JTS_PPRSEQ_N() \ 437 59,58,57,56,55,54,53,52,51,50, \ 438 49,48,47,46,45,44,43,42,41,40, \ 439 39,38,37,36,35,34,33,32,31,30, \ 440 29,28,27,26,25,24,23,22,21,20, \ 441 19,18,17,16,15,14,13,12,11,10, \ 460 #ifndef JTS_E_FOR_EACH_1 461 #error "include jts_b.h before jts.h" 470 #define JTS_D(X, ...) jsonToStruct JTS_NAME(X) = { \ 471 (const jsonToStruct_element *[]) {JTS_CONCATENATE(JTS_E_FOR_EACH_, JTS_PPNARG(__VA_ARGS__)) (JTS_ELEMENT, X, __VA_ARGS__) NULL }, \ 483 #define JTS_D_EX(X, ...) jsonToStruct_custom JTS_CUST_NAME(X) = { \ 484 (const jsonToStruct_element_custom *[]) {JTS_CONCATENATE(JTS_EX_FOR_EACH_, JTS_PPNARG(__VA_ARGS__)) (JTS_ELEMENT_C, X, __VA_ARGS__) NULL } \ 492 #define JTS_E(X) extern jsonToStruct JTS_NAME(X); 499 #define JTS_E_EX(X) extern jsonToStruct_custom JTS_CUST_NAME(X); 511 #define JTS(X,Y) (X *) jts_structify (&JTS_NAME(X), Y, (jsonToStruct_custom *) 0) 523 #define JTS_EX(X,Y) (X *) jts_structify (&JTS_NAME(X), Y, &JTS_CUST_NAME(X)) 533 #define JTS_FREE(X,Y) jts_structify_reverse (&JTS_NAME(X), Y, (jsonToStruct_custom *) 0) 543 #define JTS_EX_FREE(X,Y) jts_structify_reverse (&JTS_NAME(X), Y, &JTS_CUST_NAME(X)) 556 #define STJ(X, Y) stj_jsonify (&JTS_NAME(X), Y) 565 #define STJ_FREE(X) free(X) 579 #define STJ_L(X,...) stj_jsonify_list (&JTS_NAME(X), JTS_PPNARG(__VA_ARGS__)/2, __VA_ARGS__) const int data_type
Definition: dscrd_i.h:235
const struct jsonToStruct_s * jts_cust
Definition: dscrd_i.h:238
void dscrd_error_set_detailed(const char *fmt,...)
char * body
response body
Definition: dscrd_i.h:163
int is_DscrdFile_real(DscrdFile *file)
Discord file wrapper.
Definition: dscrd.h:765
void DiscordGateway_close(DiscordClient *client)
DiscordClient * discord_client
pointer DiscordClient of this response
Definition: dscrd_i.h:170
#define JTS_E(X)
Definition: dscrd_i.h:492
void DscrdFile_data(DscrdFile *file)
void dscrd_rest_error_parse(int code, const char *body)
void * DiscordGateway_open(DiscordClient *client)
const int pp
Definition: dscrd_i.h:237
const int pointer_type
Definition: dscrd_i.h:244
void Rest_free(void *rest)
void DiscordGateway_callback_remove(void *gateway, int i)
Discord channel.
Definition: dscrd.h:619
Discord user.
Definition: dscrd.h:297
enum dscrd_event_e dscrd_event
void DscrdFile_data_base64(DscrdFile *file)
void * Rest_init(const char *host, int port)
char http_status[255]
HTTP status response (if any), for example "BAD REQUEST".
Definition: dscrd_i.h:158
char * stj_jsonify(const jsonToStruct *jts, void *ptr)
Discord guild.
Definition: dscrd.h:505
void DscrdFile_data_enc(DscrdFile *file)
enum dscrd_type_e dscrd_type
Discord datatypes.
#define JTS_E_EX(X)
Definition: dscrd_i.h:499
char * stj_jsonify_list(const jsonToStruct *jts, int num,...)
Rest Response structure.
Definition: dscrd_i.h:156
dscrd_event_e
Definition: dscrd_i.h:22
const char * name
Definition: dscrd_i.h:269
const jsonToStruct_element_custom ** a
Definition: dscrd_i.h:255
DiscordChannelList * json_DiscordChannelList(DiscordClient *client, char *json)
void * jts_structify(const jsonToStruct *jts, const char *json_data, jsonToStruct_custom *customdef)
WebhookList structure.
Definition: dscrd.h:913
const jsonToStruct_element ** a
array to jsonToStruct elements (jsonToStruct_element_s)
Definition: dscrd_i.h:265
WebhookList * json_WebhookList(DiscordClient *client, char *json)
const char * name
Definition: dscrd_i.h:242
void Rest_call_free(RestResp *res)
void dscrd_error_set(const char *fmt,...)
const int size
Definition: dscrd_i.h:236
void dscrd_client_process(DiscordClient *client, dscrd_type type, int event)
int content_length
length of response body
Definition: dscrd_i.h:167
struct jsonToStruct_custom_s jsonToStruct_custom
jsonToStruct_custom structure
DiscordGuild ** json_DiscordGuilds(DiscordClient *client, char *json)
const int size
Definition: dscrd_i.h:243
const size_t offset
Definition: dscrd_i.h:233
const struct jsonToStruct_s * jts_cust
Definition: dscrd_i.h:245
const char * name
Definition: dscrd_i.h:232
struct jsonToStruct_s jsonToStruct
jsonToStruct structure (array)
struct jsonToStruct_element_s jsonToStruct_element
jsonToStruct element structure
const int data_size
size of data
Definition: dscrd_i.h:267
Definition: dscrd_i.h:241
char * content_type
body's content type (if body), for example "application/json"
Definition: dscrd_i.h:165
void * json_discordobject(DiscordClient *client, dscrd_type type, char *json)
const int pp
Definition: dscrd_i.h:246
jsonToStruct_custom structure
Definition: dscrd_i.h:254
void * jts_structify_jp(const jsonToStruct *jts, json_t *root, jsonToStruct_custom *customdef)
int http_code
HTTP code response, for example 404 (Not Found)
Definition: dscrd_i.h:160
struct RestResp_s RestResp
Rest Response structure.
struct jsonToStruct_element_custom_s jsonToStruct_element_custom
Webhook structure.
Definition: dscrd.h:882
jsonToStruct structure (array)
Definition: dscrd_i.h:263
const char * dscrd_user_status_str(int status)
todo
void DiscordGateway_send(DiscordClient *client, const char *message)
RestResp * Rest_call(DiscordClient *client, const char *path, unsigned char method, const char *body)
void * api_data
private pointer
Definition: dscrd_i.h:172
jsonToStruct element structure
Definition: dscrd_i.h:231
const size_t align
Definition: dscrd_i.h:234
Discord session.
Definition: dscrd.h:366
void jts_structify_reverse(const jsonToStruct *jts, void *structure, jsonToStruct_custom *customdef)