BotSharp/src/Infrastructure/BotSharp.Core/Templating/TemplateRender.cs

50 lines
1.7 KiB
C#
Raw Normal View History

2023-10-12 11:30:13 +00:00
using BotSharp.Abstraction.Agents.Models;
using BotSharp.Abstraction.Functions.Models;
2023-10-12 11:30:13 +00:00
using BotSharp.Abstraction.Models;
2023-08-28 03:50:10 +00:00
using BotSharp.Abstraction.Routing.Models;
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-10-12 11:30:13 +00:00
_options.MemberAccessStrategy.Register<NameDesc>();
_options.MemberAccessStrategy.Register<ParameterPropertyDef>();
2023-10-20 03:47:14 +00:00
_options.MemberAccessStrategy.Register<RoleDialogModel>();
2023-10-12 11:30:13 +00:00
_options.MemberAccessStrategy.Register<Agent>();
_options.MemberAccessStrategy.Register<RoutableAgent>();
2023-09-22 20:38:58 +00:00
_options.MemberAccessStrategy.Register<RoutingHandlerDef>();
2024-05-02 22:07:12 +00:00
_options.MemberAccessStrategy.Register<FunctionDef>();
_options.MemberAccessStrategy.Register<FunctionParametersDef>();
2024-03-07 18:27:29 +00:00
_options.MemberAccessStrategy.Register<UserIdentity>();
}
2023-08-30 23:29:01 +00:00
public string Render(string template, Dictionary<string, object> dict)
{
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;
}
else
{
2023-10-28 20:59:26 +00:00
_logger.LogWarning(error);
2023-08-30 23:29:01 +00:00
return template;
}
}
}