main shrub/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	char *summary;
17	bool nullable;
18	bool new_id;
19};
20
21struct description {
22	char *summary;
23	char *text;
24};
25
26struct enumentry {
27	char *name;
28	char *value;
29	char *summary;
30	struct description desc;
31};
32
33struct enumdef {
34	char *name;
35	struct description desc;
36	struct enumentry *entries;
37	size_t nentries;
38	size_t entrycap;
39};
40
41struct message {
42	char *name;
43	enum message_dir dir;
44	int opcode;
45	bool destructor;
46	struct description desc;
47	struct argument *args;
48	size_t nargs;
49	size_t argcap;
50};
51
52struct interface {
53	char *name;
54	int version;
55	struct description desc;
56	struct message *requests;
57	size_t nrequests;
58	size_t requestcap;
59	struct message *events;
60	size_t nevents;
61	size_t eventcap;
62	struct enumdef *enums;
63	size_t nenums;
64	size_t enumcap;
65	bool created_by_local;
66	size_t ncreates;
67};
68
69struct protocol {
70	char *name;
71	struct description desc;
72	struct interface *ifaces;
73	size_t nifaces;
74	size_t ifacecap;
75	size_t total_requests;
76	size_t total_events;
77	size_t total_enums;
78};
79
80struct interface *proto_add_interface(struct protocol *, const char *, int);
81struct interface *proto_find_interface(const struct protocol *, const char *);
82struct message *iface_add_message(struct interface *, enum message_dir, const char *);
83void message_add_arg(struct message *, const char *, const char *, const char *, bool);
84void iface_add_enum(struct interface *, const char *);
85struct enumdef *iface_last_enum(struct interface *);
86void enum_add_entry(struct enumdef *, const char *, const char *);
87struct enumentry *enum_last_entry(struct enumdef *);
88void proto_resolve(struct protocol *);
89void proto_free(struct protocol *);
90
91const struct argument *message_creator_arg(const struct message *);
92
93#endif