Skip to content

Commit

Permalink
Use .NET 8.
Browse files Browse the repository at this point in the history
  • Loading branch information
ejball committed Jul 3, 2024
1 parent f0c8245 commit 029141a
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 18 deletions.
8 changes: 4 additions & 4 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Facility.CodeGen.Console" Version="2.11.0" />
<PackageVersion Include="Facility.Definition" Version="2.11.0" />
<PackageVersion Include="Facility.CodeGen.Console" Version="2.13.0" />
<PackageVersion Include="Facility.Definition" Version="2.13.0" />
<PackageVersion Include="FluentAssertions" Version="6.12.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.2" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
<PackageVersion Include="NUnit" Version="4.1.0" />
<PackageVersion Include="NUnit3TestAdapter" Version="4.5.0" />
<PackageVersion Include="XmlDocMarkdown.Core" Version="2.9.0" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFrameworks>netstandard2.0;net6.0;net7.0;net8.0</TargetFrameworks>
<Description>Used to interpret Swagger (OpenAPI) 2.0 definitions.</Description>
<PackageTags>Facility FSD Swagger OpenAPI Definition</PackageTags>
<IsPackable>true</IsPackable>
Expand Down
24 changes: 16 additions & 8 deletions src/Facility.Definition.Swagger/SwaggerConversion.cs
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,9 @@ private KeyValuePair<string, SwaggerSchema> ResolveDefinition(SwaggerSchema swag
if (swaggerDefinition.Ref != null)
{
name = GetDefinitionNameFromRef(swaggerDefinition.Ref, position);
if (!m_swaggerService.Definitions!.TryGetValue(name, out swaggerDefinition))
if (m_swaggerService.Definitions!.TryGetValue(name, out var resolvedDefinition))
swaggerDefinition = resolvedDefinition;
else
m_errors.Add(new ServiceDefinitionError($"Missing definition named '{name}'.", position));
}

Expand All @@ -383,8 +385,10 @@ private void ResolveOperations(ref SwaggerOperations swaggerOperations, ref Swag
if (!swaggerOperations.Ref.StartsWith(refPrefix, StringComparison.Ordinal))
m_errors.Add(new ServiceDefinitionError("Operations $ref must start with '#/paths/'.", context.CreatePosition()));

string name = UnescapeRefPart(swaggerOperations.Ref.Substring(refPrefix.Length));
if (!m_swaggerService.Paths!.TryGetValue(name, out swaggerOperations))
var name = UnescapeRefPart(swaggerOperations.Ref.Substring(refPrefix.Length));
if (m_swaggerService.Paths!.TryGetValue(name, out var resolvedOperations))
swaggerOperations = resolvedOperations;
else
m_errors.Add(new ServiceDefinitionError($"Missing path named '{name}'.", context.CreatePosition()));

context = context.Root.CreateContext("paths/" + name);
Expand All @@ -399,8 +403,10 @@ private SwaggerParameter ResolveParameter(SwaggerParameter swaggerParameter, Ser
if (!swaggerParameter.Ref.StartsWith(refPrefix, StringComparison.Ordinal))
m_errors.Add(new ServiceDefinitionError("Parameter $ref must start with '#/parameters/'.", position));

string name = UnescapeRefPart(swaggerParameter.Ref.Substring(refPrefix.Length));
if (!m_swaggerService.Parameters!.TryGetValue(name, out swaggerParameter))
var name = UnescapeRefPart(swaggerParameter.Ref.Substring(refPrefix.Length));
if (m_swaggerService.Parameters!.TryGetValue(name, out var resolvedParameter))
swaggerParameter = resolvedParameter;
else
m_errors.Add(new ServiceDefinitionError($"Missing parameter named '{name}'.", position));
}

Expand All @@ -415,8 +421,10 @@ private SwaggerResponse ResolveResponse(SwaggerResponse swaggerResponse, Service
if (!swaggerResponse.Ref.StartsWith(refPrefix, StringComparison.Ordinal))
m_errors.Add(new ServiceDefinitionError("Response $ref must start with '#/responses/'.", position));

string name = UnescapeRefPart(swaggerResponse.Ref.Substring(refPrefix.Length));
if (!m_swaggerService.Responses!.TryGetValue(name, out swaggerResponse))
var name = UnescapeRefPart(swaggerResponse.Ref.Substring(refPrefix.Length));
if (m_swaggerService.Responses!.TryGetValue(name, out var resolvedResponse))
swaggerResponse = resolvedResponse;
else
m_errors.Add(new ServiceDefinitionError($"Missing response named '{name}'.", position));
}

Expand Down Expand Up @@ -507,7 +515,7 @@ internal static bool IsFacilityError(KeyValuePair<string, SwaggerSchema> swagger
return TryGetFacilityTypeName(valueSchema, position);
}

private static string UnescapeRefPart(string value) => value.Replace("~1", "/").Replace("~0", "~");
private static string UnescapeRefPart(string value) => value.ReplaceOrdinal("~1", "/").ReplaceOrdinal("~0", "~");

private static readonly Regex s_pathParameter = new Regex(@"\{[^}]+\}");

Expand Down
5 changes: 3 additions & 2 deletions src/Facility.Definition.Swagger/SwaggerGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -540,7 +540,7 @@ public OurEventEmitter(IEventEmitter nextEmitter)
public override void Emit(ScalarEventInfo eventInfo, IEmitter emitter)
{
// prefer the literal style for multi-line strings
if (eventInfo.Source.Type == typeof(string) && eventInfo.Style == ScalarStyle.Any && ((string) eventInfo.Source.Value!).IndexOf('\n') != -1)
if (eventInfo.Source.Type == typeof(string) && eventInfo.Style == ScalarStyle.Any && ((string) eventInfo.Source.Value!).ContainsOrdinal("\n"))
eventInfo.Style = ScalarStyle.Literal;

// ensure strings that look like numbers remain strings
Expand All @@ -552,6 +552,7 @@ public override void Emit(ScalarEventInfo eventInfo, IEmitter emitter)
}

private sealed class OurDictionary<TKey, TValue> : IDictionary<TKey, TValue>, IReadOnlyDictionary<TKey, TValue>
where TKey : notnull
{
public OurDictionary()
{
Expand Down Expand Up @@ -608,7 +609,7 @@ public bool Remove(TKey key)
return true;
}

public bool TryGetValue(TKey key, out TValue value) => m_dictionary.TryGetValue(key, out value);
public bool TryGetValue(TKey key, out TValue value) => m_dictionary.TryGetValue(key, out value!);

public TValue this[TKey key]
{
Expand Down
16 changes: 13 additions & 3 deletions src/Facility.Definition.Swagger/SwaggerUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,19 @@ public static class SwaggerUtility

internal static IList<T> EmptyIfNull<T>(this IList<T>? list) => list ?? Array.Empty<T>();

internal static IReadOnlyDictionary<TKey, TValue> EmptyIfNull<TKey, TValue>(this IReadOnlyDictionary<TKey, TValue>? list) => list ?? new Dictionary<TKey, TValue>();

internal static IDictionary<TKey, TValue> EmptyIfNull<TKey, TValue>(this IDictionary<TKey, TValue>? list) => list ?? new Dictionary<TKey, TValue>();
internal static IReadOnlyDictionary<TKey, TValue> EmptyIfNull<TKey, TValue>(this IReadOnlyDictionary<TKey, TValue>? list)
where TKey : notnull => list ?? new Dictionary<TKey, TValue>();

internal static IDictionary<TKey, TValue> EmptyIfNull<TKey, TValue>(this IDictionary<TKey, TValue>? list)
where TKey : notnull => list ?? new Dictionary<TKey, TValue>();

#if NET6_0_OR_GREATER
internal static bool ContainsOrdinal(this string text, string value) => text.Contains(value, StringComparison.Ordinal);
internal static string ReplaceOrdinal(this string text, string oldValue, string newValue) => text.Replace(oldValue, newValue, StringComparison.Ordinal);
#else
internal static bool ContainsOrdinal(this string text, string value) => text.Contains(value);
internal static string ReplaceOrdinal(this string text, string oldValue, string newValue) => text.Replace(oldValue, newValue);
#endif

private sealed class CamelCaseExceptDictionaryKeysContractResolver : CamelCasePropertyNamesContractResolver
{
Expand Down

0 comments on commit 029141a

Please sign in to comment.