2023-08-28 03:50:10 +00:00
|
|
|
using BotSharp.Abstraction.Routing.Models;
|
2023-08-25 15:33:21 +00:00
|
|
|
using BotSharp.Abstraction.Templating;
|
|
|
|
|
using Fluid;
|
|
|
|
|
|
|
|
|
|
namespace BotSharp.Core.Templating;
|
|
|
|
|
|
|
|
|
|
public class TemplateRender : ITemplateRender
|
|
|
|
|
{
|
|
|
|
|
private readonly IServiceProvider _services;
|
|
|
|
|
private readonly ILogger _logger;
|
|
|
|
|
private static readonly FluidParser _parser = new FluidParser();
|
|
|
|
|
private TemplateOptions _options;
|
|
|
|
|
|
|
|
|
|
public TemplateRender(IServiceProvider services, ILogger<TemplateRender> logger)
|
|
|
|
|
{
|
|
|
|
|
_services = services;
|
|
|
|
|
_logger = logger;
|
|
|
|
|
_options = new TemplateOptions();
|
2023-08-28 03:50:10 +00:00
|
|
|
_options.MemberAccessStrategy.MemberNameStrategy = MemberNameStrategies.SnakeCase;
|
2023-09-02 05:10:46 +00:00
|
|
|
_options.MemberAccessStrategy.Register<RoutingItem>();
|
2023-09-22 20:38:58 +00:00
|
|
|
_options.MemberAccessStrategy.Register<RoutingHandlerDef>();
|
2023-08-25 15:33:21 +00:00
|
|
|
}
|
|
|
|
|
|
2023-08-30 23:29:01 +00:00
|
|
|
public string Render(string template, Dictionary<string, object> dict)
|
2023-08-25 15:33:21 +00:00
|
|
|
{
|
|
|
|
|
if (_parser.TryParse(template, out var t, out var error))
|
|
|
|
|
{
|
|
|
|
|
var context = new TemplateContext(dict, _options);
|
2023-08-30 23:29:01 +00:00
|
|
|
template = t.Render(context);
|
|
|
|
|
return template;
|
2023-08-25 15:33:21 +00:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
|
2023-08-30 23:29:01 +00:00
|
|
|
return template;
|
2023-08-25 15:33:21 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|