in src/Elastic.Markdown/Myst/FrontMatter/ApplicableTo.cs [123:167]
public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer)
{
if (parser.TryConsume<Scalar>(out var value))
{
if (string.IsNullOrWhiteSpace(value.Value))
return ApplicableTo.All;
if (string.Equals(value.Value, "all", StringComparison.InvariantCultureIgnoreCase))
return ApplicableTo.All;
}
var deserialized = rootDeserializer.Invoke(typeof(Dictionary<object, object?>));
if (deserialized is not Dictionary<object, object?> { Count: > 0 } dictionary)
return null;
var applicableTo = new ApplicableTo();
var warnings = new List<string>();
var keys = dictionary.Keys.OfType<string>().ToArray();
var oldStyleKeys = keys.Where(k => k.StartsWith(':')).ToList();
if (oldStyleKeys.Count > 0)
warnings.Add($"Applies block does not use valid yaml keys: {string.Join(", ", oldStyleKeys)}");
var unknownKeys = keys.Except(KnownKeys).Except(oldStyleKeys).ToList();
if (unknownKeys.Count > 0)
warnings.Add($"Applies block does not support the following keys: {string.Join(", ", unknownKeys)}");
if (TryGetApplicabilityOverTime(dictionary, "stack", out var stackAvailability))
applicableTo.Stack = stackAvailability;
if (TryGetApplicabilityOverTime(dictionary, "product", out var productAvailability))
applicableTo.Product = productAvailability;
AssignServerless(dictionary, applicableTo);
AssignDeploymentType(dictionary, applicableTo);
if (TryGetDeployment(dictionary, out var deployment))
applicableTo.Deployment = deployment;
if (TryGetProjectApplicability(dictionary, out var serverless))
applicableTo.Serverless = serverless;
if (warnings.Count > 0)
applicableTo.Warnings = new WarningCollection(warnings);
return applicableTo;
}