Innovenergy_trunk/csharp/lib/Protocols/DBus/Utils/Extensions.cs

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();
}
}