main shrubtools / proto / protocol.h
 1#ifndef PROTOCOL_H
 2#define PROTOCOL_H
 3
 4#include <stdbool.h>
 5#include <stddef.h>
 6
 7enum message_dir {
 8	MSG_REQUEST,
 9	MSG_EVENT,
10};
11
12struct argument {
13	char *name;
14	char *type;
15	char *iface;
16	bool nullable;
17	bool new_id;
18};
19
20struct description {
21	char *summary;
22	char *text;
23};
24
25struct enumdef {
26	char *name;
27	struct description desc;
28};
29
30struct message {
31	char *name;
32	enum message_dir dir;
33	int opcode;
34	bool destructor;
35	struct description desc;
36	struct argument *args;
37	size_t nargs;
38	size_t argcap;
39};
40
41struct interface {
42	char *name;
43	int version;
44	struct description desc;
45	struct message *requests;
46	size_t nrequests;
47	size_t requestcap;
48	struct message *events;
49	size_t nevents;
50	size_t eventcap;
51	struct enumdef *enums;
52	size_t nenums;
53	size_t enumcap;
54	bool created_by_local;
55	size_t ncreates;
56};
57
58struct protocol {
59	char *name;
60	struct description desc;
61	struct interface *ifaces;
62	size_t nifaces;
63	size_t ifacecap;
64	size_t total_requests;
65	size_t total_events;
66	size_t total_enums;
67};
68
69struct interface *proto_add_interface(struct protocol *, const char *, int);
70struct interface *proto_find_interface(const struct protocol *, const char *);
71struct message *iface_add_message(struct interface *, enum message_dir, const char *);
72void message_add_arg(struct message *, const char *, const char *, const char *, bool);
73void iface_add_enum(struct interface *, const char *);
74struct enumdef *iface_last_enum(struct interface *);
75void proto_resolve(struct protocol *);
76void proto_free(struct protocol *);
77
78const struct argument *message_creator_arg(const struct message *);
79
80#endif