Skip to content

Commit

Permalink
Merge pull request #2724 from FirelyTeam/feature/2463-improved-ostric…
Browse files Browse the repository at this point in the history
…h-parsing

#2463 improved ostrich parsing
  • Loading branch information
mmsmits authored Feb 21, 2024
2 parents 250bfd5 + 484d4ac commit c27d2b7
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ public static IFhirSerializationEngine BackwardsCompatible(ModelInspector inspec
/// and just continue parsing. Note that this may mean data loss.
/// </summary>
public static IFhirSerializationEngine Ostrich(ModelInspector inspector) =>
new PocoSerializationEngine(inspector, _ => true);
new PocoSerializationEngine(inspector, _ => true, new FhirJsonPocoDeserializerSettings(){Validator = null}, new FhirXmlPocoDeserializerSettings(){Validator = null});


private static bool isRecoverableIssue(CodedException ce) =>
Expand Down
27 changes: 12 additions & 15 deletions src/Hl7.Fhir.Base/Serialization/engine/PocoSerializationEngine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
using Hl7.Fhir.Utility;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;

namespace Hl7.Fhir.Serialization
Expand All @@ -27,39 +28,35 @@ internal class PocoSerializationEngine : IFhirSerializationEngine

private readonly ModelInspector _inspector;
private readonly Predicate<CodedException> _ignoreFilter;

/// <summary>
/// Creates an implementation of <see cref="IFhirSerializationEngine"/> that uses the newer POCO (de)serializers.
/// </summary>
/// <param name="inspector">Reflection data of the POCO model to use.</param>
/// <param name="ignoreFilter">A predicate that returns true for issues that should not be reported.</param>
public PocoSerializationEngine(ModelInspector inspector, Predicate<CodedException> ignoreFilter)
{
_inspector = inspector;
_ignoreFilter = ignoreFilter;
}
private readonly FhirJsonPocoDeserializerSettings _jsonSettings;
private readonly FhirXmlPocoDeserializerSettings _xmlSettings;

/// <summary>
/// Creates an implementation of <see cref="IFhirSerializationEngine"/> that uses the newer POCO (de)serializers.
/// </summary>
/// <param name="inspector">Reflection data of the POCO model to use.</param>
public PocoSerializationEngine(ModelInspector inspector)
/// <param name="ignoreFilter">Predicate specifying which exceptions to ignore</param>
/// <param name="jsonSettings">Settings for json deserializing</param>
/// <param name="xmlSettings">Settings for xml deserializing</param>
public PocoSerializationEngine(ModelInspector inspector, Predicate<CodedException>? ignoreFilter=null, FhirJsonPocoDeserializerSettings? jsonSettings=null, FhirXmlPocoDeserializerSettings? xmlSettings=null)
{
_inspector = inspector;
_ignoreFilter = _ => false;
_ignoreFilter = ignoreFilter ?? (_ => false);
_jsonSettings = jsonSettings ?? new FhirJsonPocoDeserializerSettings();
_xmlSettings = xmlSettings ?? new FhirXmlPocoDeserializerSettings();
}

/// <inheritdoc />
public Resource DeserializeFromXml(string data)
{
var deserializer = new BaseFhirXmlPocoDeserializer(_inspector);
var deserializer = new BaseFhirXmlPocoDeserializer(_inspector, _xmlSettings);
return deserializeAndIgnoreErrors(deserializer.TryDeserializeResource, data);
}

/// <inheritdoc />
public Resource DeserializeFromJson(string data)
{
var deserializer = new BaseFhirJsonPocoDeserializer(_inspector);
var deserializer = new BaseFhirJsonPocoDeserializer(_inspector, _jsonSettings);
return deserializeAndIgnoreErrors(deserializer.TryDeserializeResource, data);
}

Expand Down

0 comments on commit c27d2b7

Please sign in to comment.