1 module gherkin.document;
2 
3 import std.json : JSONValue, parseJSON;
4 import std.range : empty;
5 import std.typecons : Nullable;
6 
7 import asdf : serializeToJson;
8 import gherkin.comment : Comment;
9 import gherkin.feature : Feature;
10 
11 ///
12 struct GherkinDocument
13 {
14     ///
15     string uri;
16     ///
17     string[] document;
18     ///
19     Nullable!Feature feature;
20     ///
21     Comment[] comments;
22 
23     ///
24     JSONValue toJSON() const
25     {
26         auto json = JSONValue(["uri": JSONValue(uri)]);
27 
28         if (!feature.isNull)
29         {
30             json["feature"] = feature.get.toJSON();
31         }
32 
33         if (!comments.empty)
34         {
35             json["comments"] = parseJSON(serializeToJson(comments));
36         }
37 
38         return JSONValue(["gherkinDocument": json]);
39     }
40 }