yavsc/src/Yavsc.Server/Services/FrontmatterParser.cs

34 lines
1.2 KiB
C#
Raw Normal View History

2026-06-27 13:30:28 +01:00
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
using Yavsc.Server.Models.Billing;
namespace Yavsc.Server.Services;
public static class FrontmatterParser
{
2026-07-04 22:58:29 +01:00
public const string YamlHeader = "---\n";
public const string YamlSeparator = "\n---";
2026-06-27 13:30:28 +01:00
private static readonly IDeserializer _deserializer =
new DeserializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.IgnoreUnmatchedProperties()
.Build();
public static FrontmatterOffreResult Parse(string markdown)
{
// Le contenu doit commencer par ----
2026-07-04 22:58:29 +01:00
if (!markdown.TrimStart().StartsWith(YamlHeader, StringComparison.Ordinal))
2026-06-27 13:30:28 +01:00
return new FrontmatterOffreResult { Corps = markdown };
2026-07-04 22:58:29 +01:00
var parts = markdown.Substring(YamlHeader.Length).Trim().Split(new[] { YamlSeparator }, 2,
2026-06-27 13:30:28 +01:00
StringSplitOptions.None);
if (parts.Length < 2)
return new FrontmatterOffreResult { Corps = markdown };
2026-07-04 22:58:29 +01:00
var yamlBlock = parts[0];
var corps = parts[1];
2026-06-27 13:30:28 +01:00
var meta = _deserializer.Deserialize<FrontmatterOffreResult>(yamlBlock);
meta.Corps = corps;
return meta;
}
}