using System; using System.Collections.Generic; using InABox.Core; using Scriban; using Scriban.Runtime; namespace PRSDesktop { public static class DataModelUtils { public static string ParseTemplate(DataModel model, string data) { if (string.IsNullOrWhiteSpace(data)) return ""; var template = Template.Parse(data); if (template.HasErrors) throw new Exception(string.Join("\n", template.Messages)); var templatecontext = new TemplateContext { MemberRenamer = member => member.Name }; var so = new ScriptObject(); ScriptObjectExtensions.Import(so, "string.to_base64", new Func(b => Convert.ToBase64String(b))); foreach (var (key, table) in model.ModelTables) { var objects = new List(); if (table.Type is not null) { foreach (var tablerow in table.Table.Rows) objects.Add(tablerow.ToObject(table.Type)); } so.Add(key, objects); } templatecontext.PushGlobal(so); return template.Render(templatecontext); } } }