83 lines
4.5 KiB
C#
83 lines
4.5 KiB
C#
// Licensed to the .NET Foundation under one or more agreements.
|
|
// The .NET Foundation licenses this file to you under the MIT License.
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
namespace System.Reactive
|
|
{
|
|
/// <summary>
|
|
/// Class to create an <see cref="IObserver{T}"/> instance from delegate-based implementations of the On* methods.
|
|
/// </summary>
|
|
/// <typeparam name="T">The type of the elements in the sequence.</typeparam>
|
|
public sealed class AnonymousObserver<T> : ObserverBase<T>
|
|
{
|
|
private readonly Action<T> _onNext;
|
|
private readonly Action<Exception> _onError;
|
|
private readonly Action _onCompleted;
|
|
|
|
/// <summary>
|
|
/// Creates an observer from the specified <see cref="IObserver{T}.OnNext(T)"/>, <see cref="IObserver{T}.OnError(Exception)"/>, and <see cref="IObserver{T}.OnCompleted()"/> actions.
|
|
/// </summary>
|
|
/// <param name="onNext">Observer's <see cref="IObserver{T}.OnNext(T)"/> action implementation.</param>
|
|
/// <param name="onError">Observer's <see cref="IObserver{T}.OnError(Exception)"/> action implementation.</param>
|
|
/// <param name="onCompleted">Observer's <see cref="IObserver{T}.OnCompleted()"/> action implementation.</param>
|
|
/// <exception cref="ArgumentNullException"><paramref name="onNext"/> or <paramref name="onError"/> or <paramref name="onCompleted"/> is <c>null</c>.</exception>
|
|
public AnonymousObserver(Action<T> onNext, Action<Exception> onError, Action onCompleted)
|
|
{
|
|
_onNext = onNext ?? throw new ArgumentNullException(nameof(onNext));
|
|
_onError = onError ?? throw new ArgumentNullException(nameof(onError));
|
|
_onCompleted = onCompleted ?? throw new ArgumentNullException(nameof(onCompleted));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Creates an observer from the specified <see cref="IObserver{T}.OnNext(T)"/> action.
|
|
/// </summary>
|
|
/// <param name="onNext">Observer's <see cref="IObserver{T}.OnNext(T)"/> action implementation.</param>
|
|
/// <exception cref="ArgumentNullException"><paramref name="onNext"/> is <c>null</c>.</exception>
|
|
public AnonymousObserver(Action<T> onNext)
|
|
: this(onNext, Stubs.Throw, Stubs.Nop)
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Creates an observer from the specified <see cref="IObserver{T}.OnNext(T)"/> and <see cref="IObserver{T}.OnError(Exception)"/> actions.
|
|
/// </summary>
|
|
/// <param name="onNext">Observer's <see cref="IObserver{T}.OnNext(T)"/> action implementation.</param>
|
|
/// <param name="onError">Observer's <see cref="IObserver{T}.OnError(Exception)"/> action implementation.</param>
|
|
/// <exception cref="ArgumentNullException"><paramref name="onNext"/> or <paramref name="onError"/> is <c>null</c>.</exception>
|
|
public AnonymousObserver(Action<T> onNext, Action<Exception> onError)
|
|
: this(onNext, onError, Stubs.Nop)
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Creates an observer from the specified <see cref="IObserver{T}.OnNext(T)"/> and <see cref="IObserver{T}.OnCompleted()"/> actions.
|
|
/// </summary>
|
|
/// <param name="onNext">Observer's <see cref="IObserver{T}.OnNext(T)"/> action implementation.</param>
|
|
/// <param name="onCompleted">Observer's <see cref="IObserver{T}.OnCompleted()"/> action implementation.</param>
|
|
/// <exception cref="ArgumentNullException"><paramref name="onNext"/> or <paramref name="onCompleted"/> is <c>null</c>.</exception>
|
|
public AnonymousObserver(Action<T> onNext, Action onCompleted)
|
|
: this(onNext, Stubs.Throw, onCompleted)
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Calls the action implementing <see cref="IObserver{T}.OnNext(T)"/>.
|
|
/// </summary>
|
|
/// <param name="value">Next element in the sequence.</param>
|
|
protected override void OnNextCore(T value) => _onNext(value);
|
|
|
|
/// <summary>
|
|
/// Calls the action implementing <see cref="IObserver{T}.OnError(Exception)"/>.
|
|
/// </summary>
|
|
/// <param name="error">The error that has occurred.</param>
|
|
protected override void OnErrorCore(Exception error) => _onError(error);
|
|
|
|
/// <summary>
|
|
/// Calls the action implementing <see cref="IObserver{T}.OnCompleted()"/>.
|
|
/// </summary>
|
|
protected override void OnCompletedCore() => _onCompleted();
|
|
|
|
internal ISafeObserver<T> MakeSafe() => new AnonymousSafeObserver<T>(_onNext, _onError, _onCompleted);
|
|
}
|
|
}
|