@@ -28,13 +28,17 @@ typedef enum {
28
28
KIND_PATH ,
29
29
KIND_RESPONSE ,
30
30
KIND_PARAMETER ,
31
+ KIND_TITLE ,
32
+ KIND_SERVER ,
31
33
} openapiKind ;
32
34
33
35
static kindDefinition OpenAPIKinds [] = {
34
36
{ true, 'd' , "schema" , "schemas" },
35
37
{ true, 'p' , "path" , "paths" },
36
38
{ true, 'R' , "response" , "responses" },
37
39
{ true, 'P' , "parameter" , "parameters" },
40
+ { true, 't' , "title" , "titles" },
41
+ { true, 's' , "server" , "servers (or hosts in swagger)" },
38
42
};
39
43
40
44
#define KEY_UNKNOWN KEYWORD_NONE
@@ -45,6 +49,11 @@ enum openapiKeys {
45
49
KEY_PARAMETERS ,
46
50
KEY_RESPONSES ,
47
51
KEY_DEFINITIONS ,
52
+ KEY_INFO ,
53
+ KEY_TITLE ,
54
+ KEY_SERVERS ,
55
+ KEY_URL ,
56
+ KEY_HOST ,
48
57
};
49
58
50
59
static const keywordTable OpenAPIKeywordTable [] = {
@@ -54,6 +63,11 @@ static const keywordTable OpenAPIKeywordTable[] = {
54
63
{ "parameters" , KEY_PARAMETERS },
55
64
{ "responses" , KEY_RESPONSES },
56
65
{ "definitions" , KEY_DEFINITIONS },
66
+ { "info" , KEY_INFO },
67
+ { "title" , KEY_TITLE },
68
+ { "servers" , KEY_SERVERS },
69
+ { "url" , KEY_URL },
70
+ { "host" , KEY_HOST },
57
71
};
58
72
59
73
struct yamlBlockTypeStack {
@@ -89,8 +103,7 @@ static void pushBlockType (struct sOpenAPISubparser *openapi, yaml_token_type_t
89
103
s -> key = KEY_UNKNOWN ;
90
104
}
91
105
92
- static void popBlockType (struct sOpenAPISubparser * openapi ,
93
- yaml_token_t * token )
106
+ static void popBlockType (struct sOpenAPISubparser * openapi )
94
107
{
95
108
struct yamlBlockTypeStack * s ;
96
109
@@ -102,11 +115,10 @@ static void popBlockType (struct sOpenAPISubparser *openapi,
102
115
eFree (s );
103
116
}
104
117
105
- static void popAllBlockType (struct sOpenAPISubparser * openapi ,
106
- yaml_token_t * token )
118
+ static void popAllBlockType (struct sOpenAPISubparser * openapi )
107
119
{
108
120
while (openapi -> type_stack )
109
- popBlockType (openapi , token );
121
+ popBlockType (openapi );
110
122
}
111
123
112
124
static bool stateStackMatch (struct yamlBlockTypeStack * stack ,
@@ -197,6 +209,21 @@ static const enum openapiKeys definitions2Keys[] = {
197
209
KEY_DEFINITIONS ,
198
210
};
199
211
212
+ static const enum openapiKeys title3Keys [] = {
213
+ KEY_TITLE ,
214
+ KEY_INFO ,
215
+ };
216
+
217
+ static const enum openapiKeys server3Keys [] = {
218
+ KEY_URL ,
219
+ KEY_UNKNOWN ,
220
+ KEY_SERVERS ,
221
+ };
222
+
223
+ static const enum openapiKeys host2Keys [] = {
224
+ KEY_HOST ,
225
+ };
226
+
200
227
const struct tagSource tagSources [] = {
201
228
{
202
229
KIND_PATH ,
@@ -235,12 +262,30 @@ const struct tagSource tagSources[] = {
235
262
},
236
263
};
237
264
238
- static void handleKey (struct sOpenAPISubparser * openapi ,
239
- yaml_token_t * token )
265
+ const struct tagSource tagValueSources [] = {
266
+ {
267
+ KIND_TITLE ,
268
+ title3Keys ,
269
+ ARRAY_SIZE (title3Keys ),
270
+ },
271
+ {
272
+ KIND_SERVER ,
273
+ server3Keys ,
274
+ ARRAY_SIZE (server3Keys ),
275
+ },
276
+ {
277
+ KIND_SERVER ,
278
+ host2Keys ,
279
+ ARRAY_SIZE (host2Keys ),
280
+ }
281
+ };
282
+
283
+ static void handleToken (struct sOpenAPISubparser * openapi , yaml_token_t * token ,
284
+ const struct tagSource * tss , size_t ts_count )
240
285
{
241
- for (int i = 0 ; i < ARRAY_SIZE ( tagSources ) ; i ++ )
286
+ for (int i = 0 ; i < ts_count ; i ++ )
242
287
{
243
- const struct tagSource * ts = & tagSources [i ];
288
+ const struct tagSource * ts = & tss [i ];
244
289
245
290
if (stateStackMatch (openapi -> type_stack ,
246
291
ts -> keys , ts -> countKeys ))
@@ -251,10 +296,23 @@ static void handleKey(struct sOpenAPISubparser *openapi,
251
296
attachYamlPosition (& tag , token , false);
252
297
253
298
makeTagEntry (& tag );
299
+ break ;
254
300
}
255
301
}
256
302
}
257
303
304
+ static void handleKey (struct sOpenAPISubparser * openapi ,
305
+ yaml_token_t * token )
306
+ {
307
+ handleToken (openapi , token , tagSources , ARRAY_SIZE (tagSources ));
308
+ }
309
+
310
+ static void handleValue (struct sOpenAPISubparser * openapi ,
311
+ yaml_token_t * token )
312
+ {
313
+ handleToken (openapi , token , tagValueSources , ARRAY_SIZE (tagValueSources ));
314
+ }
315
+
258
316
static void openapiPlayStateMachine (struct sOpenAPISubparser * openapi ,
259
317
yaml_token_t * token )
260
318
{
@@ -271,15 +329,17 @@ static void openapiPlayStateMachine (struct sOpenAPISubparser *openapi,
271
329
switch (openapi -> play_detection_state )
272
330
{
273
331
case DSTAT_LAST_KEY :
274
- TRACE_PRINT (" key: %s\n " , (char * )token -> data .scalar .value );
332
+ TRACE_PRINT (" key: %s" , (char * )token -> data .scalar .value );
275
333
if (openapi -> type_stack )
276
334
{
277
335
openapi -> type_stack -> key = parseKey (token );
278
336
handleKey (openapi , token );
279
337
}
280
338
break ;
281
339
case DSTAT_LAST_VALUE :
282
- TRACE_PRINT (" value: %s\n" , (char * )token -> data .scalar .value );
340
+ TRACE_PRINT (" value: %s" , (char * )token -> data .scalar .value );
341
+ if (openapi -> type_stack )
342
+ handleValue (openapi , token );
283
343
break ;
284
344
default :
285
345
break ;
@@ -307,9 +367,9 @@ static void newTokenCallback (yamlSubparser *s, yaml_token_t *token)
307
367
openapiPlayStateMachine ((struct sOpenAPISubparser * )s , token );
308
368
309
369
if (token -> type == YAML_BLOCK_END_TOKEN )
310
- popBlockType ((struct sOpenAPISubparser * )s , token );
370
+ popBlockType ((struct sOpenAPISubparser * )s );
311
371
else if (token -> type == YAML_STREAM_END_TOKEN )
312
- popAllBlockType ((struct sOpenAPISubparser * )s , token );
372
+ popAllBlockType ((struct sOpenAPISubparser * )s );
313
373
}
314
374
315
375
static void inputStart (subparser * s )
0 commit comments