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 }