raiguard/odin-wayland

git clone https://git.raiguard.me/raiguard/odin-wayland

Caleb HeuerCodegen ID types and interface literalsf425641

trunk
1.5 KiB103 linesraw
1package codegen
2
3import "core:math/fixed"
4
5Enum_Value :: int
6Version :: int
7
8Fixed :: fixed.Fixed(i32, 8)
9
10Copyright :: string
11
12Protocol :: struct {
13	file_name: string,
14	// Attributes
15	name: string,
16	// Body
17	copyright: Copyright,
18	description: Description,
19	interfaces: [dynamic]Interface,
20}
21
22Description :: struct {
23	// Attributes
24	summary: string,
25	// Body
26	body: string,
27}
28
29Interface :: struct {
30	// Attributes
31	name: string,
32	version: Version,
33	frozen: bool,
34	// Body
35	description: Description,
36	requests: [dynamic]Message,
37	events: [dynamic]Message,
38	enums: [dynamic]Enum,
39}
40
41Message :: struct {
42	// Attributes
43	name: string,
44	destructor: bool,
45	since: Version,
46	deprecated_since: Version,
47	// Body
48	description: Description,
49	args: [dynamic]Arg,
50}
51
52Arg :: struct {
53	// Attributes
54	name: string,
55	type: Arg_Type,
56	summary: string,
57	interface: string,
58	allow_null: bool,
59	enum_: Arg_Enum,
60	// Body
61	description: Description,
62}
63
64Arg_Type :: enum {
65	Int,
66	Uint,
67	Fixed,
68	String,
69	Array,
70	FD,
71	New_ID,
72	Object,
73}
74
75Arg_Enum :: union {
76	string,
77	Arg_Ext_Enum,
78}
79
80Arg_Ext_Enum :: struct {
81	interface, suffix: string
82}
83
84Enum :: struct {
85	// Attributes
86	name: string,
87	since: Version,
88	bitfield: bool,
89	// Body
90	description: Description,
91	entries: [dynamic]Enum_Entry,
92}
93
94Enum_Entry :: struct {
95	// Attributes
96	name: string,
97	value: Enum_Value, // TODO: Consider whether to auto-detect the kind of formatting and carry it over into the code.
98	summary: string,
99	since: Version,
100	deprecated_since: Version,
101	// Body
102	description: Description
103}