From b1e8ceb1c97c5af0698962b4e095ad7ec68329e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tau=20G=C3=A4rtli?= Date: Sun, 19 Jan 2025 21:50:42 +0100 Subject: [PATCH] Add more Try* API wrappers --- FrameworkFeatureConstants.props | 4 ++-- .../JsonSerializerOptionsExtensions.cs | 14 ++++++++++++++ .../Extensions/OrderedDictionaryExtensions.cs | 18 ++++++++++++++++++ .../ParseExtensions.IpPrimitives.cs | 3 +++ Funcky/PublicAPI.Unshipped.txt | 6 ++++++ 5 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 Funcky/Extensions/JsonSerializerOptionsExtensions.cs create mode 100644 Funcky/Extensions/OrderedDictionaryExtensions.cs diff --git a/FrameworkFeatureConstants.props b/FrameworkFeatureConstants.props index b1e63c81..03d5a21f 100644 --- a/FrameworkFeatureConstants.props +++ b/FrameworkFeatureConstants.props @@ -16,9 +16,9 @@ $(DefineConstants);GENERIC_MATH;GENERIC_PARSABLE;AOT - $(DefineConstants);RANDOM_SHUFFLE;UTF8_SPAN_PARSABLE + $(DefineConstants);RANDOM_SHUFFLE;UTF8_SPAN_PARSABLE;JSON_SERIALIZER_OPTIONS_TRY_GET_TYPE_INFO;IP_NETWORK - $(DefineConstants);REFLECTION_ASSEMBLY_NAME_INFO;REFLECTION_TYPE_NAME + $(DefineConstants);REFLECTION_ASSEMBLY_NAME_INFO;REFLECTION_TYPE_NAME;ORDERED_DICTIONARY diff --git a/Funcky/Extensions/JsonSerializerOptionsExtensions.cs b/Funcky/Extensions/JsonSerializerOptionsExtensions.cs new file mode 100644 index 00000000..05d5b4a3 --- /dev/null +++ b/Funcky/Extensions/JsonSerializerOptionsExtensions.cs @@ -0,0 +1,14 @@ +#if JSON_SERIALIZER_OPTIONS_TRY_GET_TYPE_INFO +using System.Text.Json; +using System.Text.Json.Serialization.Metadata; + +namespace Funcky.Extensions; + +public static class JsonSerializerOptionsExtensions +{ + public static Option GetTypeInfoOrNone(this JsonSerializerOptions options, Type type) + => options.TryGetTypeInfo(type, out var typeInfo) + ? typeInfo + : Option.None; +} +#endif diff --git a/Funcky/Extensions/OrderedDictionaryExtensions.cs b/Funcky/Extensions/OrderedDictionaryExtensions.cs new file mode 100644 index 00000000..e6052c7d --- /dev/null +++ b/Funcky/Extensions/OrderedDictionaryExtensions.cs @@ -0,0 +1,18 @@ +#if ORDERED_DICTIONARY +using static Funcky.Internal.ValueMapper; + +namespace Funcky.Extensions; + +public static class OrderedDictionaryExtensions +{ + /// Determines the index of a specific key in the . + /// The dictionary to search. + /// The key to locate. + /// + /// is . + /// The index of if found; otherwise, . + public static Option IndexOfOrNone(this OrderedDictionary dictionary, TKey key) + where TKey : notnull + => MapNotFoundToNone(dictionary.IndexOf(key)); +} +#endif diff --git a/Funcky/Extensions/ParseExtensions/ParseExtensions.IpPrimitives.cs b/Funcky/Extensions/ParseExtensions/ParseExtensions.IpPrimitives.cs index 40c888d5..842ef541 100644 --- a/Funcky/Extensions/ParseExtensions/ParseExtensions.IpPrimitives.cs +++ b/Funcky/Extensions/ParseExtensions/ParseExtensions.IpPrimitives.cs @@ -7,4 +7,7 @@ namespace Funcky.Extensions; #if IP_END_POINT_TRY_PARSE_SUPPORTED [OrNoneFromTryPattern(typeof(IPEndPoint), nameof(IPEndPoint.TryParse))] #endif +#if IP_NETWORK +[OrNoneFromTryPattern(typeof(IPNetwork), nameof(IPNetwork.TryParse))] +#endif public static partial class ParseExtensions; diff --git a/Funcky/PublicAPI.Unshipped.txt b/Funcky/PublicAPI.Unshipped.txt index 7dc5c581..8b46e6f3 100644 --- a/Funcky/PublicAPI.Unshipped.txt +++ b/Funcky/PublicAPI.Unshipped.txt @@ -1 +1,7 @@ #nullable enable +Funcky.Extensions.JsonSerializerOptionsExtensions +Funcky.Extensions.OrderedDictionaryExtensions +static Funcky.Extensions.JsonSerializerOptionsExtensions.GetTypeInfoOrNone(this System.Text.Json.JsonSerializerOptions! options, System.Type! type) -> Funcky.Monads.Option +static Funcky.Extensions.OrderedDictionaryExtensions.IndexOfOrNone(this System.Collections.Generic.OrderedDictionary! dictionary, TKey key) -> Funcky.Monads.Option +static Funcky.Extensions.ParseExtensions.ParseIPNetworkOrNone(this string? candidate) -> Funcky.Monads.Option +static Funcky.Extensions.ParseExtensions.ParseIPNetworkOrNone(this System.ReadOnlySpan candidate) -> Funcky.Monads.Option