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