in src/PSRule/Pipeline/PipelineReciever.cs [98:146]
public static IEnumerable<TargetObject> ConvertFromYaml(TargetObject targetObject, VisitTargetObject next)
{
// Only attempt to deserialize if the input is a string, file or URI
if (!IsAcceptedType(targetObject))
return new TargetObject[] { targetObject };
var reader = ReadAsReader(targetObject, out var sourceInfo);
var d = new DeserializerBuilder()
.IgnoreUnmatchedProperties()
.WithTypeConverter(new PSObjectYamlTypeConverter())
.WithNodeDeserializer(
inner => new PSObjectYamlDeserializer(inner, sourceInfo),
s => s.InsteadOf<YamlConvertibleNodeDeserializer>())
.Build();
try
{
var parser = new YamlDotNet.Core.Parser(reader);
var result = new List<TargetObject>();
parser.TryConsume<StreamStart>(out _);
while (parser.Current is DocumentStart)
{
var item = d.Deserialize<PSObject[]>(parser);
if (item == null)
continue;
var items = VisitItems(item, sourceInfo, next);
if (items == null)
continue;
result.AddRange(items);
}
return result.Count == 0 ? EmptyArray : result.ToArray();
}
catch (Exception ex)
{
if (sourceInfo != null && !string.IsNullOrEmpty(sourceInfo.File))
{
RunspaceContext.CurrentThread.Writer.ErrorReadFileFailed(sourceInfo.File, ex);
return EmptyArray;
}
throw;
}
finally
{
reader.Dispose();
}
}