10
10
11
11
doc = "https://github.com/Palakis/obs-websocket/blob/master/docs/generated/protocol.md"
12
12
13
- disclaimer = """\
13
+ disclaimer = """
14
14
// This file is automatically generated.
15
- // https://github.com/christopher-dG/go-obs-websocket/blob/master/codegen/protocol.py\
15
+ // https://github.com/christopher-dG/go-obs-websocket/blob/master/codegen/protocol.py
16
16
"""
17
17
18
18
# TODO: Test the less clear ones.
@@ -44,10 +44,16 @@ def process_json(d: Dict):
44
44
def gen_category (prefix : str , category : str , data : Dict ):
45
45
"""Generate all events or requests in one category."""
46
46
func = gen_event if prefix == "events" else gen_request
47
- content = "\n \n " .join (func (event ) for event in data )
47
+ content = "\n " .join (
48
+ filter (
49
+ lambda s : not s .isspace (),
50
+ "\n " .join (func (thing ) for thing in data ).split ("\n " ),
51
+ )
52
+ )
53
+
48
54
with open (f"{ prefix } _{ category } .go" .replace (" " , "_" ), "w" ) as f :
49
55
f .write (
50
- f"""\
56
+ f"""
51
57
package { package }
52
58
53
59
{ disclaimer }
@@ -65,15 +71,14 @@ def gen_events(events: Dict):
65
71
66
72
def gen_event (data : Dict ) -> str :
67
73
"""Write Go code with a type definition and interface functions."""
68
- if data .get ("returns" ):
69
- struct = f"""\
70
- type { data ["name" ]} Event struct {{
71
- { go_struct_variables (go_variables (data ["returns" ]))}
72
- _event `json:",squash"`
73
- }}\
74
- """
75
- else :
76
- struct = f"type { data ['name' ]} Event _event"
74
+ struct = f"""
75
+ type { data ["name" ]} Event struct {{
76
+ { go_struct_variables (go_variables (data .get ("returns" , [])))}
77
+ _event `json:",squash"`
78
+ }}
79
+ """
80
+ # else:
81
+ # struct = f"type {data['name']}Event _event"
77
82
78
83
description = newlinify (f"{ data ['name' ]} Event : { data ['description' ]} " )
79
84
if not description .endswith ("." ):
@@ -83,19 +88,10 @@ def gen_event(data: Dict) -> str:
83
88
f"\n // Since obs-websocket version: { data ['since' ].capitalize ()} ."
84
89
)
85
90
86
- return f"""\
91
+ return f"""
87
92
{ description }
88
93
// { doc } #{ data ["heading" ]["text" ].lower ()}
89
94
{ struct }
90
-
91
- // Type returns the event's update type.
92
- func (e { data ["name" ]} Event) Type() string {{ return e.Type_ }}
93
-
94
- // StreamTimecode returns the event's stream timecode.
95
- func (e { data ["name" ]} Event) StreamTimecode() string {{ return e.StreamTimecode_ }}
96
-
97
- // RecTimecode returns the event's recording timecode.
98
- func (e { data ["name" ]} Event) RecTimecode() string {{ return e.RecTimecode_ }}
99
95
"""
100
96
101
97
@@ -108,14 +104,14 @@ def gen_requests(requests: Dict):
108
104
def gen_request (data : Dict ) -> str :
109
105
"""Write Go code with type definitions and interface functions."""
110
106
if data .get ("params" ):
111
- struct = f"""\
107
+ struct = f"""
112
108
type { data ["name" ]} Request struct {{
113
109
{ go_struct_variables (go_variables (data ["params" ]))}
114
110
_request `json:",squash"`
115
111
}}
116
112
"""
117
113
else :
118
- struct = f"type { data ['name' ]} Request _request"
114
+ struct = f"type { data ['name' ]} Request struct {{ _request }} "
119
115
120
116
description = newlinify (f"{ data ['name' ]} Request : { data ['description' ]} " )
121
117
if description and not description .endswith ("." ):
@@ -125,19 +121,13 @@ def gen_request(data: Dict) -> str:
125
121
f"\n // Since obs-websocket version: { data ['since' ].capitalize ()} ."
126
122
)
127
123
128
- request = f"""\
124
+ request = f"""
129
125
{ description }
130
126
// { doc } #{ data ["heading" ]["text" ].lower ()}
131
127
{ struct }
132
128
133
129
{ gen_request_new (data )}
134
130
135
- // ID returns the request's message ID.
136
- func (r { data ["name" ]} Request) ID() string {{ return r.ID_ }}
137
-
138
- // Type returns the request's message type.
139
- func (r { data ["name" ]} Request) Type() string {{ return r.Type_ }}
140
-
141
131
// Send sends the request and returns a channel to which the response will be sent.
142
132
func (r { data ["name" ]} Request) Send(c Client) (chan { data ["name" ]} Response, error) {{
143
133
generic, err := c.SendRequest(r)
@@ -151,49 +141,47 @@ def gen_request(data: Dict) -> str:
151
141
"""
152
142
153
143
if data .get ("returns" ):
154
- struct = f"""\
144
+ struct = f"""
155
145
type { data ["name" ]} Response struct {{
156
146
{ go_struct_variables (go_variables (data ["returns" ]))}
157
147
_response `json:",squash"`
158
148
}}
159
149
"""
160
150
else :
161
- struct = f"type { data ['name' ]} Response _response"
151
+ struct = (
152
+ f"""type { data ["name" ]} Response struct {{ _response `json:",squash"`}}"""
153
+ )
162
154
163
155
description = f"// { data ['name' ]} Response : Response for { data ['name' ]} Request."
164
156
if data .get ("since" ):
165
157
description += (
166
158
f"\n // Since obs-websocket version: { data ['since' ].capitalize ()} ."
167
159
)
168
160
169
- response = f"""\
161
+ response = f"""
170
162
{ description }
171
163
// { doc } #{ data ["heading" ]["text" ].lower ()}
172
164
{ struct }
173
-
174
- // ID returns the response's message ID.
175
- func (r { data ["name" ]} Response) ID() string {{ return r.ID_ }}
176
-
177
- // Status returns the response's status.
178
- func (r { data ["name" ]} Response) Status() string {{ return r.Status_ }}
179
-
180
- // Error returns the response's error.
181
- func (r { data ["name" ]} Response) Error() string {{ return r.Error_ }}
182
165
"""
183
166
184
167
return f"{ request } \n \n { response } "
185
168
186
169
187
170
def gen_request_new (request : Dict ):
188
171
"""Generate Go code with a New___Request function for a request type."""
189
- base = f"""\
172
+ base = f"""
190
173
// New{ request ["name" ]} Request returns a new { request ["name" ]} Request.
191
174
func New{ request ["name" ]} Request(\
192
175
"""
193
176
variables = go_variables (request .get ("params" , []), export = False )
194
177
if not variables :
195
- sig = f"{ base } ) { request ['name' ]} Request {{"
196
- constructor_args = f'{{ID_: getMessageID(), Type_: "{ request ["name" ]} "}}'
178
+ sig = f"{ base } ) { request ['name' ]} Request"
179
+ constructor_args = f"""\
180
+ {{_request{{
181
+ ID_: getMessageID(),
182
+ Type_: "{ request ["name" ]} ",
183
+ }}}}
184
+ """
197
185
else :
198
186
args = "\n " .join (
199
187
f"{ '_type' if var ['name' ] == 'type' else var ['name' ]} { var ['type' ]} ,"
@@ -214,18 +202,14 @@ def gen_request_new(request: Dict):
214
202
"""
215
203
)
216
204
if len (variables ) == 1 :
217
- sig = f"{ base } { args } ) { request ['name' ]} Request {{ "
205
+ sig = f"{ base } { args } ) { request ['name' ]} Request"
218
206
else :
219
- sig = f"""\
207
+ sig = f"""
220
208
{ base }
221
209
{ args }
222
- ) { request ["name" ]} Request {{ \
210
+ ) { request ["name" ]} Request\
223
211
"""
224
- return f"""\
225
- { sig }
226
- return { request ["name" ]} Request{ constructor_args }
227
- }}\
228
- """
212
+ return f"{ sig } {{ return { request ['name' ]} Request{ constructor_args } }}"
229
213
230
214
231
215
def gen_typeswitches (data : Dict ):
@@ -270,7 +254,7 @@ def gen_typeswitches(data: Dict):
270
254
271
255
with open ("typeswitches.go" , "w" ) as f :
272
256
f .write (
273
- f"""\
257
+ f"""
274
258
package { package }
275
259
276
260
{ disclaimer }
0 commit comments