38 lines
1.3 KiB
C#
38 lines
1.3 KiB
C#
|
using System.Diagnostics;
|
||
|
using System.Reactive;
|
||
|
using System.Reactive.Linq;
|
||
|
using System.Runtime.CompilerServices;
|
||
|
using static System.Runtime.CompilerServices.MethodImplOptions;
|
||
|
|
||
|
namespace InnovEnergy.Lib.Protocols.DBus.Utils;
|
||
|
|
||
|
internal static class Extensions
|
||
|
{
|
||
|
|
||
|
// this is a copy of a method in Utils
|
||
|
// it is reimplemented here in order to make this project independent of Utils
|
||
|
[DebuggerStepThrough][MethodImpl(AggressiveInlining | AggressiveOptimization)]
|
||
|
public static R Apply<T, R>(this T t, Func<T, R> f) => f(t);
|
||
|
|
||
|
// this is a copy of a method in Utils
|
||
|
// it is reimplemented here in order to make this project independent of Utils
|
||
|
public static Boolean IsNullOrEmpty(this String? s) => String.IsNullOrEmpty(s);
|
||
|
|
||
|
public static IObservable<TSource> DumpErrors<TSource>(this IObservable<TSource> source)
|
||
|
{
|
||
|
return source.DoOnError(Console.WriteLine);
|
||
|
}
|
||
|
|
||
|
public static IObservable<TSource> DoOnError<TSource>(this IObservable<TSource> source, Action<Exception> action )
|
||
|
{
|
||
|
return source
|
||
|
.Materialize()
|
||
|
.Do(n =>
|
||
|
{
|
||
|
if (n.Kind == NotificationKind.OnError)
|
||
|
action(n.Exception!);
|
||
|
})
|
||
|
.Dematerialize();
|
||
|
}
|
||
|
|
||
|
}
|