DotNext by Roman Sakno

<PackageReference Include="DotNext" Version="3.1.0" />

.NET API 362,496 bytes

 Optional

public static class Optional
Various extension and factory methods for constructing optional value.
using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Threading.Tasks; namespace DotNext { public static class Optional { [AsyncStateMachine(typeof(<OrNull>d__0<>))] [return: System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0 })] public static Task<T?> OrNull<T>([System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 0 })] this Task<Optional<T>> task) where T : struct { <OrNull>d__0<T> stateMachine = default(<OrNull>d__0<T>); stateMachine.<>t__builder = AsyncTaskMethodBuilder<T?>.Create(); stateMachine.task = task; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } [System.Runtime.CompilerServices.NullableContext(2)] [AsyncStateMachine(typeof(<Or>d__1<>))] [return: System.Runtime.CompilerServices.Nullable(new byte[] { 1, 2 })] public static Task<T> Or<T>([System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 1 })] this Task<Optional<T>> task, T defaultValue) { <Or>d__1<T> stateMachine = default(<Or>d__1<T>); stateMachine.<>t__builder = AsyncTaskMethodBuilder<T>.Create(); stateMachine.task = task; stateMachine.defaultValue = defaultValue; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } [System.Runtime.CompilerServices.NullableContext(2)] [AsyncStateMachine(typeof(<Convert>d__2<, >))] [return: System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 1 })] public static Task<Optional<TOutput>> Convert<TInput, TOutput>([System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 1 })] this Task<Optional<TInput>> task, [System.Runtime.CompilerServices.Nullable(1)] Converter<TInput, TOutput> converter) { <Convert>d__2<TInput, TOutput> stateMachine = default(<Convert>d__2<TInput, TOutput>); stateMachine.<>t__builder = AsyncTaskMethodBuilder<Optional<TOutput>>.Create(); stateMachine.task = task; stateMachine.converter = converter; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } [System.Runtime.CompilerServices.NullableContext(1)] [AsyncStateMachine(typeof(<OrThrow>d__3<, >))] public static Task<T> OrThrow<[System.Runtime.CompilerServices.Nullable(2)] T, [System.Runtime.CompilerServices.Nullable(0)] TException>([System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 1 })] this Task<Optional<T>> task) where TException : Exception, new { <OrThrow>d__3<T, TException> stateMachine = default(<OrThrow>d__3<T, TException>); stateMachine.<>t__builder = AsyncTaskMethodBuilder<T>.Create(); stateMachine.task = task; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } [System.Runtime.CompilerServices.NullableContext(1)] [AsyncStateMachine(typeof(<OrThrow>d__4<, >))] public static Task<T> OrThrow<[System.Runtime.CompilerServices.Nullable(2)] T, [System.Runtime.CompilerServices.Nullable(0)] TException>([System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 1 })] this Task<Optional<T>> task, Func<TException> exceptionFactory) where TException : Exception { <OrThrow>d__4<T, TException> stateMachine = default(<OrThrow>d__4<T, TException>); stateMachine.<>t__builder = AsyncTaskMethodBuilder<T>.Create(); stateMachine.task = task; stateMachine.exceptionFactory = exceptionFactory; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } [System.Runtime.CompilerServices.NullableContext(1)] [AsyncStateMachine(typeof(<OrInvoke>d__5<>))] public static Task<T> OrInvoke<[System.Runtime.CompilerServices.Nullable(2)] T>([System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 1 })] this Task<Optional<T>> task, Func<T> defaultFunc) { <OrInvoke>d__5<T> stateMachine = default(<OrInvoke>d__5<T>); stateMachine.<>t__builder = AsyncTaskMethodBuilder<T>.Create(); stateMachine.task = task; stateMachine.defaultFunc = defaultFunc; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } [System.Runtime.CompilerServices.NullableContext(2)] [AsyncStateMachine(typeof(<OrDefault>d__6<>))] [return: System.Runtime.CompilerServices.Nullable(new byte[] { 1, 2 })] public static Task<T> OrDefault<T>([System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 1 })] this Task<Optional<T>> task) { <OrDefault>d__6<T> stateMachine = default(<OrDefault>d__6<T>); stateMachine.<>t__builder = AsyncTaskMethodBuilder<T>.Create(); stateMachine.task = task; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } [System.Runtime.CompilerServices.NullableContext(1)] [AsyncStateMachine(typeof(<If>d__7<>))] [return: System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 1 })] public static Task<Optional<T>> If<[System.Runtime.CompilerServices.Nullable(2)] T>([System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 1 })] this Task<Optional<T>> task, Predicate<T> condition) { <If>d__7<T> stateMachine = default(<If>d__7<T>); stateMachine.<>t__builder = AsyncTaskMethodBuilder<Optional<T>>.Create(); stateMachine.task = task; stateMachine.condition = condition; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } [System.Runtime.CompilerServices.NullableContext(1)] public static bool IsOptional(this Type optionalType) { if (optionalType.IsConstructedGenericType) return optionalType.GetGenericTypeDefinition() == typeof(Optional<>); return false; } [System.Runtime.CompilerServices.NullableContext(1)] [return: System.Runtime.CompilerServices.Nullable(2)] public static Type GetUnderlyingType(Type optionalType) { if (!optionalType.IsOptional()) return null; return optionalType.GetGenericArguments()[0]; } public static Optional<T> ToOptional<T>([In] [IsReadOnly] ref T? value) where T : struct { return (Optional<T>)(((object?)(Optional<?>?)value) ?? ((object)Optional<T>.None)); } public static T? OrNull<T>([In] [IsReadOnly] ref Optional<T> value) where T : struct { if (!value.TryGet(out T value2)) return null; return value2; } [System.Runtime.CompilerServices.NullableContext(2)] [return: IsReadOnly] [return: System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1 })] public static ref Optional<T> Coalesce<T>([In] [IsReadOnly] [System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1 })] ref Optional<T> first, [In] [IsReadOnly] [System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1 })] ref Optional<T> second) { if (!first.HasValue) return ref second; return ref first; } [System.Runtime.CompilerServices.NullableContext(2)] [return: System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1 })] public static Optional<T> None<T>() { return Optional<T>.None; } [System.Runtime.CompilerServices.NullableContext(1)] [return: System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1 })] public static Optional<T> Some<[System.Runtime.CompilerServices.Nullable(2)] T>(T value) { return new Optional<T>(value); } [System.Runtime.CompilerServices.NullableContext(1)] [return: System.Runtime.CompilerServices.Nullable(new byte[] { 0, 2 })] public static Optional<T> Null<T>() where T : class { return Some<T>(null); } [MethodImpl(MethodImplOptions.AggressiveInlining)] [return: IsReadOnly] private static ref T GetReference<T, TException>([In] [IsReadOnly] ref Optional<T> optional, TException exceptionFactory) where T : struct where TException : struct, ISupplier<Exception> { ref T reference = ref Optional<T>.GetReference(ref optional); if (Unsafe.IsNullRef(ref Unsafe.AsRef(ref reference))) throw ((ISupplier<Exception>)exceptionFactory).Invoke(); return ref reference; } [return: IsReadOnly] public static ref T GetReference<T, TException>([In] [IsReadOnly] ref Optional<T> optional) where T : struct where TException : Exception, new { return ref GetReference(ref optional, default(Activator<TException>)); } [return: IsReadOnly] public static ref T GetReference<T>([In] [IsReadOnly] ref Optional<T> optional, [System.Runtime.CompilerServices.Nullable(1)] Func<Exception> exceptionFactory) where T : struct { return ref GetReference(ref optional, (DelegatingSupplier<Exception>)exceptionFactory); } [CLSCompliant(false)] [return: IsReadOnly] public static ref T GetReference<T>([In] [IsReadOnly] ref Optional<T> optional, [System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1 })] IntPtr exceptionFactory) where T : struct { return ref GetReference(ref optional, (Supplier<Exception>)(long)exceptionFactory); } } }