librpc
typing.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015-2017 Two Pore Guys, Inc.
3  * All rights reserved
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted providing that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
22  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
23  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24  * POSSIBILITY OF SUCH DAMAGE.
25  */
26 
27 #ifndef LIBRPC_TYPING_H
28 #define LIBRPC_TYPING_H
29 
30 #include <rpc/object.h>
31 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
40 #define RPCT_TYPING_INTERFACE "com.twoporeguys.librpc.Typing"
41 #define RPCT_TYPE_FIELD "%type"
42 #define RPCT_VALUE_FIELD "%value"
43 
44 struct rpct_type;
45 struct rpct_typei;
46 struct rpct_member;
47 struct rpct_interface;
48 struct rpct_if_member;
49 struct rpct_argument;
50 
65 typedef struct rpct_type *rpct_type_t;
66 
90 typedef struct rpct_typei *rpct_typei_t;
91 
95 typedef struct rpct_member *rpct_member_t;
96 
100 typedef struct rpct_interface *rpct_interface_t;
101 
105 typedef struct rpct_argument *rpct_argument_t;
106 
110 typedef struct rpct_if_member *rpct_if_member_t;
111 
115 typedef enum {
122 } rpct_class_t;
123 
128 
133 
138 
143 
144 #define RPCT_TYPE_APPLIER(_fn, _arg) \
145  ^(rpct_type_t _type) { \
146  return ((bool)_fn(_arg, _type)); \
147  }
148 
149 #define RPCT_INTERFACE_APPLIER(_fn, _arg) \
150  ^(rpct_interface_t _iface) { \
151  return ((bool)_fn(_arg, _iface)); \
152  }
153 
154 #define RPCT_MEMBER_APPLIER(_fn, _arg) \
155  ^(rpct_member_t _member) { \
156  return ((bool)_fn(_arg, _member)); \
157  }
158 
159 #define RPCT_IF_MEMBER_APPLIER(_fn, _arg) \
160  ^(rpct_if_member_t _if_member) { \
161  return ((bool)_fn(_arg, _if_member)); \
162  }
163 
169 int rpct_init(bool load_system_types);
170 
174 void rpct_free(void);
175 
183 int rpct_read_file(const char *path);
184 
193 int rpct_read_idl(const char *name, rpc_object_t idl);
194 
201 int rpct_load_types(const char *path);
202 
208 int rpct_load_types_dir(const char *path);
209 
219 int rpct_load_types_stream(int fd);
220 
226 int rpct_load_types_cached(void);
227 
234 const char *rpct_type_get_name(rpct_type_t type);
235 
244 const char *rpct_type_get_origin(rpct_type_t iface);
245 
252 const char *rpct_type_get_module(rpct_type_t type);
253 
260 const char *rpct_type_get_description(rpct_type_t type);
261 
268 rpct_type_t rpct_type_get_parent(rpct_type_t type);
269 
276 rpct_class_t rpct_type_get_class(rpct_type_t type);
277 
287 rpct_typei_t rpct_type_get_definition(rpct_type_t type);
288 
295 int rpct_type_get_generic_vars_count(rpct_type_t type);
296 
306 const char *rpct_type_get_generic_var(rpct_type_t type, int index);
307 
315 rpct_member_t rpct_type_get_member(rpct_type_t type, const char *name);
316 
323 rpct_typei_t rpct_typei_retain(rpct_typei_t typei);
324 
332 void rpct_typei_release(rpct_typei_t typei);
333 
339 bool rpct_typei_get_proxy(rpct_typei_t typei);
340 
346 const char *rpct_typei_get_proxy_variable(rpct_typei_t typei);
347 
354 rpct_type_t rpct_typei_get_type(rpct_typei_t typei);
355 
363 rpct_typei_t rpct_typei_get_generic_var(rpct_typei_t typei, const char *name);
364 
371 const char *rpct_typei_get_canonical_form(rpct_typei_t typei);
372 
380 rpct_typei_t rpct_typei_get_member_type(rpct_typei_t typei,
381  rpct_member_t member);
382 
390 bool rpct_typei_is_compatible(rpct_typei_t decl, rpct_typei_t type);
391 
398 const char *rpct_member_get_name(rpct_member_t member);
399 
406 const char *rpct_member_get_description(rpct_member_t member);
407 
416 rpct_typei_t rpct_member_get_typei(rpct_member_t member);
417 
424 const char *rpct_interface_get_name(rpct_interface_t iface);
425 
434 const char *rpct_interface_get_origin(rpct_interface_t iface);
435 
442 const char *rpct_interface_get_description(rpct_interface_t iface);
443 
450 enum rpc_if_member_type rpct_if_member_get_type(rpct_if_member_t member);
451 
458 const char *rpct_if_member_get_name(rpct_if_member_t member);
459 
466 const char *rpct_if_member_get_description(rpct_if_member_t member);
467 
474 rpct_typei_t rpct_method_get_return_type(rpct_if_member_t method);
475 
482 int rpct_method_get_arguments_count(rpct_if_member_t method);
483 
491 rpct_argument_t rpct_method_get_argument(rpct_if_member_t method, int index);
492 
499 rpct_typei_t rpct_property_get_type(rpct_if_member_t prop);
500 
507 const char *rpct_argument_get_name(rpct_argument_t arg);
508 
515 const char *rpct_argument_get_description(rpct_argument_t arg);
516 
523 rpct_typei_t rpct_argument_get_typei(rpct_argument_t arg);
524 
532 
539 bool rpct_members_apply(rpct_type_t type, rpct_member_applier_t applier);
540 
548 
555 bool rpct_if_member_apply(rpct_interface_t iface, rpct_if_member_applier_t applier);
556 
563 rpct_interface_t rpct_find_interface(const char *name);
564 
572 rpct_if_member_t rpct_find_if_member(const char *interface, const char *member);
573 
580 rpct_typei_t rpct_new_typei(const char *decl);
581 
589 rpc_object_t rpct_new(const char *decl, rpc_object_t object);
590 
598 rpc_object_t rpct_newi(rpct_typei_t typei, rpc_object_t object);
599 
607 rpc_object_t rpct_set_typei(rpct_typei_t typei, rpc_object_t object);
608 
615 rpct_type_t rpct_get_type(const char *name);
616 
623 rpct_typei_t rpct_get_typei(rpc_object_t instance);
624 
631 
637 void rpct_set_value(rpc_object_t object, const char *value);
638 
646 
654 
663 bool rpct_validate_args(struct rpct_if_member *func, rpc_object_t args,
664  rpc_object_t *errors);
665 
674 bool rpct_validate_return(struct rpct_if_member *func, rpc_object_t result,
675  rpc_object_t *errors);
676 
685 bool rpct_validate(rpct_typei_t typei, rpc_object_t obj, rpc_object_t *errors);
686 
693 rpc_object_t rpct_pre_call_hook(void *cookie, rpc_object_t args);
694 
701 rpc_object_t rpct_post_call_hook(void *cookie, rpc_object_t args);
702 
709 
717 
718 #ifdef __cplusplus
719 }
720 #endif
721 
722 #endif /* LIBRPC_TYPING_H */
int rpct_download_idl(rpc_connection_t conn)
rpct_member_t rpct_type_get_member(rpct_type_t type, const char *name)
struct rpct_typei * rpct_typei_t
Definition: typing.h:90
bool(^ rpct_member_applier_t)(rpct_member_t)
Definition: typing.h:132
struct rpc_object * rpc_object_t
Definition: object.h:73
rpct_type_t rpct_typei_get_type(rpct_typei_t typei)
enum rpc_if_member_type rpct_if_member_get_type(rpct_if_member_t member)
rpct_if_member_t rpct_find_if_member(const char *interface, const char *member)
const char * rpct_interface_get_description(rpct_interface_t iface)
rpc_object_t rpct_new(const char *decl, rpc_object_t object)
int rpct_method_get_arguments_count(rpct_if_member_t method)
bool rpct_typei_get_proxy(rpct_typei_t typei)
const char * rpct_type_get_description(rpct_type_t type)
const char * rpct_member_get_name(rpct_member_t member)
bool rpct_typei_is_compatible(rpct_typei_t decl, rpct_typei_t type)
void rpct_typei_release(rpct_typei_t typei)
rpct_typei_t rpct_new_typei(const char *decl)
bool(^ rpct_if_member_applier_t)(rpct_if_member_t)
Definition: typing.h:142
bool rpct_interface_apply(rpct_interface_applier_t applier)
rpc_object_t rpct_pre_call_hook(void *cookie, rpc_object_t args)
struct rpct_interface * rpct_interface_t
Definition: typing.h:100
bool rpct_if_member_apply(rpct_interface_t iface, rpct_if_member_applier_t applier)
rpc_if_member_type
Definition: service.h:212
struct rpct_argument * rpct_argument_t
Definition: typing.h:105
rpc_object_t rpct_get_value(rpc_object_t instance)
rpct_argument_t rpct_method_get_argument(rpct_if_member_t method, int index)
const char * rpct_interface_get_name(rpct_interface_t iface)
const char * rpct_interface_get_origin(rpct_interface_t iface)
rpct_type_t rpct_get_type(const char *name)
const char * rpct_type_get_module(rpct_type_t type)
struct rpc_connection * rpc_connection_t
Definition: connection.h:94
const char * rpct_type_get_generic_var(rpct_type_t type, int index)
const char * rpct_type_get_name(rpct_type_t type)
int rpct_read_file(const char *path)
const char * rpct_typei_get_canonical_form(rpct_typei_t typei)
const char * rpct_if_member_get_name(rpct_if_member_t member)
int rpct_load_types_dir(const char *path)
void rpct_set_value(rpc_object_t object, const char *value)
struct rpc_context * rpc_context_t
Definition: service.h:75
rpct_typei_t rpct_typei_get_member_type(rpct_typei_t typei, rpct_member_t member)
rpct_typei_t rpct_get_typei(rpc_object_t instance)
rpct_typei_t rpct_property_get_type(rpct_if_member_t prop)
bool(^ rpct_type_applier_t)(rpct_type_t)
Definition: typing.h:127
rpc_object_t rpct_post_call_hook(void *cookie, rpc_object_t args)
rpc_object_t rpct_newi(rpct_typei_t typei, rpc_object_t object)
struct rpct_type * rpct_type_t
Definition: typing.h:65
bool rpct_members_apply(rpct_type_t type, rpct_member_applier_t applier)
rpct_typei_t rpct_method_get_return_type(rpct_if_member_t method)
bool rpct_validate(rpct_typei_t typei, rpc_object_t obj, rpc_object_t *errors)
const char * rpct_typei_get_proxy_variable(rpct_typei_t typei)
const char * rpct_argument_get_name(rpct_argument_t arg)
struct rpct_if_member * rpct_if_member_t
Definition: typing.h:110
rpct_typei_t rpct_member_get_typei(rpct_member_t member)
rpct_typei_t rpct_type_get_definition(rpct_type_t type)
rpct_typei_t rpct_argument_get_typei(rpct_argument_t arg)
rpct_class_t
Definition: typing.h:115
rpc_object_t rpct_set_typei(rpct_typei_t typei, rpc_object_t object)
rpct_typei_t rpct_typei_retain(rpct_typei_t typei)
void rpct_free(void)
const char * rpct_argument_get_description(rpct_argument_t arg)
rpct_typei_t rpct_typei_get_generic_var(rpct_typei_t typei, const char *name)
struct rpct_member * rpct_member_t
Definition: typing.h:95
const char * rpct_member_get_description(rpct_member_t member)
int rpct_type_get_generic_vars_count(rpct_type_t type)
bool rpct_types_apply(rpct_type_applier_t applier)
rpct_interface_t rpct_find_interface(const char *name)
void rpct_allow_idl_download(rpc_context_t context)
bool(^ rpct_interface_applier_t)(rpct_interface_t)
Definition: typing.h:137
int rpct_load_types(const char *path)
bool rpct_validate_args(struct rpct_if_member *func, rpc_object_t args, rpc_object_t *errors)
int rpct_init(bool load_system_types)
int rpct_read_idl(const char *name, rpc_object_t idl)
const char * rpct_if_member_get_description(rpct_if_member_t member)
int rpct_load_types_stream(int fd)
rpct_class_t rpct_type_get_class(rpct_type_t type)
rpc_object_t rpct_serialize(rpc_object_t object)
int rpct_load_types_cached(void)
rpc_object_t rpct_deserialize(rpc_object_t object)
bool rpct_validate_return(struct rpct_if_member *func, rpc_object_t result, rpc_object_t *errors)
rpct_type_t rpct_type_get_parent(rpct_type_t type)
const char * rpct_type_get_origin(rpct_type_t iface)