コード例 #1
0
        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);
        }
コード例 #2
0
        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
            });
コード例 #3
0
        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]);
        }