public static bool Load(string path, [MaybeNullWhen(false)] out EntityTemplate template, [MaybeNullWhen(true)] out string error) { if (!File.Exists(path)) { template = null; error = "the template file was not found"; return(false); } var source = File.ReadAllText(path); if (!JsonTemplateParser.TryParse(source, out var root, out var parseError, out _)) { template = null; error = parseError; return(false); } if (root is not JsonTemplateObject rootDictionary || !rootDictionary.Members.TryGetValue("$entity", out var resourceToken) || resourceToken is not JsonTemplateString resource || resource.Value is null) { template = null; error = "the template must include an `$entity` property"; return(false); } var resourceGroup = EntityName.ToResourceGroup(resource.Value); var filename = Path.GetFileName(path); template = new EntityTemplate(resourceGroup, filename, root); error = null; return(true); }
public void TemplatesAreEvaluated() { const string template = "42"; Assert.True(JsonTemplateParser.TryParse(template, out var root, out _, out _)); Assert.True(JsonTemplateEvaluator.TryEvaluate(root, new Dictionary <string, JsonTemplateFunction>(), out var r, out var err)); Assert.Null(err); Assert.True(r is JsonTemplateNumber { Value: 42m });
public void TemplatesAreParsed() { var template = "{'a':[true, false, null, 12.3], 'b': test(42)}".Replace("'", "\""); Assert.True(JsonTemplateParser.TryParse(template, out var root, out _, out _)); var obj = Assert.IsType <JsonTemplateObject>(root); var arr = Assert.IsType <JsonTemplateArray>(obj.Members["a"]); var t = Assert.IsType <JsonTemplateBoolean>(arr.Elements[0]); Assert.True(t.Value); var f = Assert.IsType <JsonTemplateBoolean>(arr.Elements[1]); Assert.False(f.Value); Assert.IsType <JsonTemplateNull>(arr.Elements[2]); var n = Assert.IsType <JsonTemplateNumber>(arr.Elements[3]); Assert.Equal(12.3m, n.Value); var call = Assert.IsType <JsonTemplateCall>(obj.Members["b"]); Assert.Equal("test", call.Name); Assert.IsType <JsonTemplateNumber>(call.Arguments[0]); }