Skip to content

Commit c41cf9f

Browse files
committed
Enhance HL7 CQL toolkit with new methods and improvements
Added new methods for handling assembly binaries from FHIR libraries in the `InvocationToolkitExtensions` class. Renamed and expanded the `ResourceFileInfoResolver` delegate for better file resolution of FHIR resources. Improved documentation comments for clarity and made minor adjustments in the `CqlParameterInfo` struct. Removed unused using directives in `InvocationToolkitExtensions.FhirLibraryAdding.cs`.
1 parent b844a54 commit c41cf9f

File tree

5 files changed

+53
-12
lines changed

5 files changed

+53
-12
lines changed

Cql/Cql.Invocation/PublicAPI.Unshipped.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ Hl7.Cql.Invocation.Toolkit.Extensions.LibraryInvokerExtensions
3434
Hl7.Cql.Invocation.Toolkit.Extensions.LibrarySetInvokerExtensions
3535
Hl7.Cql.Invocation.Toolkit.Extensions.PostInvokeDefinitionHandler
3636
Hl7.Cql.Invocation.Toolkit.Extensions.PreInvokeDefinitionHandler
37+
Hl7.Cql.Invocation.Toolkit.Extensions.ResourceFileInfoResolver
38+
Hl7.Cql.Invocation.Toolkit.Extensions.ResourceFileInfoResolvers
3739
Hl7.Cql.Invocation.Toolkit.Extensions.SelectResultsOptions
3840
Hl7.Cql.Invocation.Toolkit.Extensions.SelectResultsOptions.Deconstruct(out Hl7.Cql.Invocation.Toolkit.Extensions.DefinitionArgumentsProvider? ProviderArgumentsCallback, out Hl7.Cql.Invocation.Toolkit.Extensions.PreInvokeDefinitionHandler? PreInvokeDefinitionCallback, out Hl7.Cql.Invocation.Toolkit.Extensions.PostInvokeDefinitionHandler? PostInvokeDefinitionCallback, out Hl7.Cql.Runtime.BatchProcessExceptionHandler<Hl7.Cql.Invocation.Toolkit.DefinitionInvoker!>? InvocationExceptionCallback) -> void
3941
Hl7.Cql.Invocation.Toolkit.Extensions.SelectResultsOptions.InvocationExceptionCallback.get -> Hl7.Cql.Runtime.BatchProcessExceptionHandler<Hl7.Cql.Invocation.Toolkit.DefinitionInvoker!>?
@@ -90,6 +92,7 @@ static Hl7.Cql.Invocation.Toolkit.Extensions.ElmToolkitInvocationExtensions.Crea
9092
static Hl7.Cql.Invocation.Toolkit.Extensions.ElmToolkitInvocationExtensions.CreateLibrarySetInvoker(this Hl7.Cql.CodeGeneration.NET.Toolkit.ElmToolkit! elmToolkit, string! name = "") -> Hl7.Cql.Invocation.Toolkit.LibrarySetInvoker!
9193
static Hl7.Cql.Invocation.Toolkit.Extensions.ElmToolkitInvocationExtensions.UseLibrarySetInvoker(this Hl7.Cql.CodeGeneration.NET.Toolkit.ElmToolkit! elmToolkit, System.Action<Hl7.Cql.Invocation.Toolkit.LibrarySetInvoker!>! useLibrarySetInvoker, string! librarySetName = "") -> void
9294
static Hl7.Cql.Invocation.Toolkit.Extensions.InvocationToolkitExtensions.AddAssemblyBinaries(this Hl7.Cql.Invocation.Toolkit.InvocationToolkit! invocationToolkit, params Hl7.Cql.CodeGeneration.NET.AssemblyBinary![]! assemblyBinary) -> Hl7.Cql.Invocation.Toolkit.InvocationToolkit!
95+
static Hl7.Cql.Invocation.Toolkit.Extensions.InvocationToolkitExtensions.AddAssemblyBinariesFromFhirLibraryAndDependencies(this Hl7.Cql.Invocation.Toolkit.InvocationToolkit! invocationToolkit, Hl7.Cql.Runtime.CqlVersionedLibraryIdentifier libraryIdentifier, Hl7.Cql.Invocation.Toolkit.Extensions.ResourceFileInfoResolver! fhirFileResolver, System.Func<System.IO.FileInfo!, bool>? filePredicate = null, Hl7.Cql.Abstractions.Mutator<System.Text.Json.JsonSerializerOptions!>? configureJsonSerializerOptions = null) -> Hl7.Cql.Invocation.Toolkit.InvocationToolkit!
9396
static Hl7.Cql.Invocation.Toolkit.Extensions.InvocationToolkitExtensions.AddAssemblyBinariesInFhirLibrariesFromDirectory(this Hl7.Cql.Invocation.Toolkit.InvocationToolkit! invocationToolkit, System.IO.DirectoryInfo! directory, System.IO.EnumerationOptions? options = null, System.Func<System.IO.FileInfo!, bool>? filePredicate = null, Hl7.Cql.Abstractions.Mutator<System.Text.Json.JsonSerializerOptions!>? configureJsonSerializerOptions = null) -> Hl7.Cql.Invocation.Toolkit.InvocationToolkit!
9497
static Hl7.Cql.Invocation.Toolkit.Extensions.InvocationToolkitExtensions.AddAssemblyBinaryFiles(this Hl7.Cql.Invocation.Toolkit.InvocationToolkit! invocationToolkit, System.Collections.Generic.IEnumerable<System.IO.FileInfo!>! files) -> Hl7.Cql.Invocation.Toolkit.InvocationToolkit!
9598
static Hl7.Cql.Invocation.Toolkit.Extensions.InvocationToolkitExtensions.AddAssemblyBinaryFilesFromDirectory(this Hl7.Cql.Invocation.Toolkit.InvocationToolkit! invocationToolkit, System.IO.DirectoryInfo! directory, System.IO.EnumerationOptions? options = null, System.Func<System.IO.FileInfo!, bool>? filePredicate = null) -> Hl7.Cql.Invocation.Toolkit.InvocationToolkit!
@@ -102,13 +105,15 @@ static Hl7.Cql.Invocation.Toolkit.Extensions.LibrarySetInvokerExtensions.InvokeL
102105
static Hl7.Cql.Invocation.Toolkit.Extensions.LibrarySetInvokerExtensions.SelectDefinitions(this Hl7.Cql.Invocation.Toolkit.LibrarySetInvoker! librarySetInvoker) -> System.Collections.Generic.IEnumerable<Hl7.Cql.Invocation.Toolkit.DefinitionInvoker!>!
103106
static Hl7.Cql.Invocation.Toolkit.Extensions.LibrarySetInvokerExtensions.SelectExpressions(this Hl7.Cql.Invocation.Toolkit.LibrarySetInvoker! librarySetInvoker, Hl7.Cql.Invocation.Toolkit.Extensions.DefinitionPredicate? filter = null) -> System.Collections.Generic.IEnumerable<Hl7.Cql.Invocation.Toolkit.DefinitionInvoker!>!
104107
static Hl7.Cql.Invocation.Toolkit.Extensions.LibrarySetInvokerExtensions.SelectExpressionsForLibrary(this Hl7.Cql.Invocation.Toolkit.LibrarySetInvoker! librarySetInvoker, Hl7.Cql.Runtime.CqlVersionedLibraryIdentifier libraryIdentifier, Hl7.Cql.Invocation.Toolkit.Extensions.DefinitionPredicate? filter = null) -> System.Collections.Generic.IEnumerable<Hl7.Cql.Invocation.Toolkit.DefinitionInvoker!>!
108+
static Hl7.Cql.Invocation.Toolkit.Extensions.ResourceFileInfoResolvers.FromDirectory(System.IO.DirectoryInfo! directory, string! resourceType = "Library") -> Hl7.Cql.Invocation.Toolkit.Extensions.ResourceFileInfoResolver!
105109
static Hl7.Cql.Invocation.Toolkit.Extensions.SelectResultsOptions.Default.get -> Hl7.Cql.Invocation.Toolkit.Extensions.SelectResultsOptions!
106110
static Hl7.Cql.Invocation.Toolkit.Extensions.SelectResultsOptions.operator !=(Hl7.Cql.Invocation.Toolkit.Extensions.SelectResultsOptions? left, Hl7.Cql.Invocation.Toolkit.Extensions.SelectResultsOptions? right) -> bool
107111
static Hl7.Cql.Invocation.Toolkit.Extensions.SelectResultsOptions.operator ==(Hl7.Cql.Invocation.Toolkit.Extensions.SelectResultsOptions? left, Hl7.Cql.Invocation.Toolkit.Extensions.SelectResultsOptions? right) -> bool
108112
virtual Hl7.Cql.Invocation.Toolkit.Extensions.DefinitionArgumentsProvider.Invoke(Hl7.Cql.Invocation.Toolkit.DefinitionInvoker! definitionInvoker, Hl7.Cql.Runtime.CqlContext! cqlContext) -> object?[]!
109113
virtual Hl7.Cql.Invocation.Toolkit.Extensions.DefinitionPredicate.Invoke(Hl7.Cql.Invocation.Toolkit.DefinitionInvoker! definitionInvoker) -> bool
110114
virtual Hl7.Cql.Invocation.Toolkit.Extensions.PostInvokeDefinitionHandler.Invoke(Hl7.Cql.Invocation.Toolkit.DefinitionInvoker! definitionInvoker, Hl7.Cql.Runtime.CqlContext! cqlContext, object?[]! definitionArguments, object? definitionResult) -> void
111115
virtual Hl7.Cql.Invocation.Toolkit.Extensions.PreInvokeDefinitionHandler.Invoke(Hl7.Cql.Invocation.Toolkit.DefinitionInvoker! definitionInvoker, Hl7.Cql.Runtime.CqlContext! cqlContext, object?[]! definitionArguments) -> void
116+
virtual Hl7.Cql.Invocation.Toolkit.Extensions.ResourceFileInfoResolver.Invoke(Hl7.Cql.Runtime.CqlVersionedLibraryIdentifier libraryIdentifier) -> System.IO.FileInfo!
112117
virtual Hl7.Cql.Invocation.Toolkit.Extensions.SelectResultsOptions.<Clone>$() -> Hl7.Cql.Invocation.Toolkit.Extensions.SelectResultsOptions!
113118
virtual Hl7.Cql.Invocation.Toolkit.Extensions.SelectResultsOptions.EqualityContract.get -> System.Type!
114119
virtual Hl7.Cql.Invocation.Toolkit.Extensions.SelectResultsOptions.Equals(Hl7.Cql.Invocation.Toolkit.Extensions.SelectResultsOptions? other) -> bool

Cql/Cql.Invocation/Toolkit/CqlParameterInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ namespace Hl7.Cql.Invocation.Toolkit;
1010
public readonly record struct CqlParameterInfo(string Name, Type Type)
1111
{
1212
/// <summary>
13-
/// Returns a string representation of the CQL parameter information,
13+
/// Returns a string representation of the CQL parameter information,
1414
/// including its type and name.
1515
/// </summary>
1616
/// <returns>
17-
/// A string in the format "<c>{Type}</c> '<c>{Name}</c>'", where <c>{Type}</c>
17+
/// A string in the format "<c>{Type}</c> '<c>{Name}</c>'", where <c>{Type}</c>
1818
/// is the C# representation of the parameter's type and <c>{Name}</c> is the parameter's name.
1919
/// </returns>
2020
public override string ToString() => $"{Type.ToCSharpString()} '{Name}'";

Cql/Cql.Invocation/Toolkit/Extensions/InvocationToolkitExtensions.FhirLibraryAdding.cs

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
using Hl7.Fhir.Serialization;
1515
using Hl7.Fhir.Validation;
1616
using System.Text.Json;
17-
using Hl7.Cql.Abstractions.Infrastructure;
18-
using Hl7.Fhir.Utility;
1917

2018
namespace Hl7.Cql.Invocation.Toolkit.Extensions;
2119

@@ -67,11 +65,38 @@ public static InvocationToolkit AddAssemblyBinariesInFhirLibrariesFromDirectory(
6765
return invocationToolkit.AddAssemblyBinaries(assemblyBinaries);
6866
}
6967

70-
68+
/// <summary>
69+
/// Adds assembly binaries from a specified FHIR library and its dependencies to the <see cref="InvocationToolkit"/>.
70+
/// </summary>
71+
/// <param name="invocationToolkit">
72+
/// The <see cref="InvocationToolkit"/> instance to which the assembly binaries will be added.
73+
/// </param>
74+
/// <param name="libraryIdentifier">
75+
/// The identifier of the FHIR library, including its version, to load the assembly binaries from.
76+
/// </param>
77+
/// <param name="fhirFileResolver">
78+
/// A delegate that resolves the file information for a given FHIR library identifier.
79+
/// </param>
80+
/// <param name="filePredicate">
81+
/// An optional predicate to filter the files to be processed. If <c>null</c>, all files are processed.
82+
/// </param>
83+
/// <param name="configureJsonSerializerOptions">
84+
/// An optional mutator to configure the <see cref="JsonSerializerOptions"/> used during processing.
85+
/// </param>
86+
/// <returns>
87+
/// The updated <see cref="InvocationToolkit"/> instance with the added assembly binaries.
88+
/// </returns>
89+
/// <remarks>
90+
/// This method processes the specified FHIR library and its dependencies to extract assembly binaries.
91+
/// It applies the provided file predicate and JSON serializer configuration during the process.
92+
/// </remarks>
93+
/// <exception cref="ArgumentNullException">
94+
/// Thrown if <paramref name="invocationToolkit"/>, <paramref name="libraryIdentifier"/>, or <paramref name="fhirFileResolver"/> is <c>null</c>.
95+
/// </exception>
7196
public static InvocationToolkit AddAssemblyBinariesFromFhirLibraryAndDependencies(
7297
this InvocationToolkit invocationToolkit,
7398
CqlVersionedLibraryIdentifier libraryIdentifier,
74-
ResourceFileInfoFromIdentifierResolver fhirFileResolver,
99+
ResourceFileInfoResolver fhirFileResolver,
75100
Func<FileInfo, bool>? filePredicate = null,
76101
Mutator<JsonSerializerOptions>? configureJsonSerializerOptions = null)
77102
{
@@ -99,12 +124,12 @@ public static InvocationToolkit AddAssemblyBinariesFromFhirLibraryAndDependencie
99124
}
100125
}
101126

102-
public static partial class FhirLibraryUtilities
127+
internal static partial class FhirLibraryUtilities
103128
{
104129
public static IEnumerable<FhirLibrary> LoadFhirLibraryAndDependencies(
105130
ILogger logger,
106131
CqlVersionedLibraryIdentifier libraryIdentifier,
107-
ResourceFileInfoFromIdentifierResolver fhirFileResolver,
132+
ResourceFileInfoResolver fhirFileResolver,
108133
Func<FileInfo, bool>? filePredicate = null,
109134
Mutator<JsonSerializerOptions>? configureJsonSerializerOptions = null)
110135
{

Cql/Cql.Invocation/Toolkit/Extensions/ResourceFileInfoResolvers.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,29 @@ namespace Hl7.Cql.Invocation.Toolkit.Extensions;
2424
/// <remarks>
2525
/// It should not be assumed that the file exists.
2626
/// </remarks>
27-
public delegate FileInfo ResourceFileInfoFromIdentifierResolver(CqlVersionedLibraryIdentifier libraryIdentifier);
27+
public delegate FileInfo ResourceFileInfoResolver(CqlVersionedLibraryIdentifier libraryIdentifier);
2828

29+
/// <summary>
30+
/// Provides extension methods for resolving file information related to FHIR resource libraries.
31+
/// </summary>
32+
/// <remarks>
33+
/// This class includes methods to create resolvers that map FHIR resource library identifiers
34+
/// to corresponding file information, such as resolving files from a specified directory.
35+
/// </remarks>
2936
public static class ResourceFileInfoResolvers
3037
{
3138
/// <summary>
32-
/// Creates a <see cref="ResourceFileInfoFromIdentifierResolver"/> that resolves file information
39+
/// Creates a <see cref="ResourceFileInfoResolver"/> that resolves file information
3340
/// for FHIR resource library located in a specified directory.
3441
/// </summary>
3542
/// <param name="directory">
3643
/// The directory from which the FHIR resource library files are resolved.
3744
/// </param>
45+
/// <param name="resourceType">
46+
/// The type of the resource, defaulting to "Library".
47+
/// </param>
3848
/// <returns>
39-
/// A <see cref="ResourceFileInfoFromIdentifierResolver"/> that resolves a <see cref="FileInfo"/>
49+
/// A <see cref="ResourceFileInfoResolver"/> that resolves a <see cref="FileInfo"/>
4050
/// instance for a given <see cref="CqlVersionedLibraryIdentifier"/> by locating the corresponding
4151
/// file in the specified directory.
4252
/// </returns>
@@ -45,7 +55,7 @@ public static class ResourceFileInfoResolvers
4555
/// using the <see cref="ResourceFileName"/> to construct the file name.
4656
/// It does not guarantee that the resolved file exists.
4757
/// </remarks>
48-
public static ResourceFileInfoFromIdentifierResolver FromDirectory(
58+
public static ResourceFileInfoResolver FromDirectory(
4959
DirectoryInfo directory,
5060
string resourceType = "Library") =>
5161
libraryIdentifier =>

Cql/Cql.Packaging/PublicAPI.Unshipped.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ override Hl7.Cql.Packaging.Toolkit.PackagingToolkitResultArtifacts.GetHashCode()
102102
static Hl7.Cql.Packaging.CqlTypeToFhirMapping.operator !=(Hl7.Cql.Packaging.CqlTypeToFhirMapping? left, Hl7.Cql.Packaging.CqlTypeToFhirMapping? right) -> bool
103103
static Hl7.Cql.Packaging.CqlTypeToFhirMapping.operator ==(Hl7.Cql.Packaging.CqlTypeToFhirMapping? left, Hl7.Cql.Packaging.CqlTypeToFhirMapping? right) -> bool
104104
static Hl7.Cql.Packaging.ResourceFileName.Create(string! type, string! identifier, string? version = null) -> Hl7.Cql.Packaging.ResourceFileName
105+
static Hl7.Cql.Packaging.ResourceFileName.implicit operator string!(Hl7.Cql.Packaging.ResourceFileName resourceFileName) -> string!
105106
static Hl7.Cql.Packaging.ResourceFileName.operator !=(Hl7.Cql.Packaging.ResourceFileName left, Hl7.Cql.Packaging.ResourceFileName right) -> bool
106107
static Hl7.Cql.Packaging.ResourceFileName.operator ==(Hl7.Cql.Packaging.ResourceFileName left, Hl7.Cql.Packaging.ResourceFileName right) -> bool
107108
static Hl7.Cql.Packaging.ResourceFileName.Parse(string! s, System.IFormatProvider? provider) -> Hl7.Cql.Packaging.ResourceFileName

0 commit comments

Comments
 (0)