// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. namespace System.Reactive { /// /// Class to create an IObserver<T> instance from delegate-based implementations of the On* methods. /// /// The type of the elements in the sequence. public sealed class AnonymousObserver : ObserverBase { private readonly Action _onNext; private readonly Action _onError; private readonly Action _onCompleted; /// /// Creates an observer from the specified OnNext, OnError, and OnCompleted actions. /// /// Observer's OnNext action implementation. /// Observer's OnError action implementation. /// Observer's OnCompleted action implementation. /// or or is null. public AnonymousObserver(Action onNext, Action onError, Action onCompleted) { if (onNext == null) throw new ArgumentNullException("onNext"); if (onError == null) throw new ArgumentNullException("onError"); if (onCompleted == null) throw new ArgumentNullException("onCompleted"); _onNext = onNext; _onError = onError; _onCompleted = onCompleted; } /// /// Creates an observer from the specified OnNext action. /// /// Observer's OnNext action implementation. /// is null. public AnonymousObserver(Action onNext) : this(onNext, Stubs.Throw, Stubs.Nop) { } /// /// Creates an observer from the specified OnNext and OnError actions. /// /// Observer's OnNext action implementation. /// Observer's OnError action implementation. /// or is null. public AnonymousObserver(Action onNext, Action onError) : this(onNext, onError, Stubs.Nop) { } /// /// Creates an observer from the specified OnNext and OnCompleted actions. /// /// Observer's OnNext action implementation. /// Observer's OnCompleted action implementation. /// or is null. public AnonymousObserver(Action onNext, Action onCompleted) : this(onNext, Stubs.Throw, onCompleted) { } /// /// Calls the onNext action. /// /// Next element in the sequence. protected override void OnNextCore(T value) { _onNext(value); } /// /// Calls the onError action. /// /// The error that has occurred. protected override void OnErrorCore(Exception error) { _onError(error); } /// /// Calls the onCompleted action. /// protected override void OnCompletedCore() { _onCompleted(); } internal IObserver MakeSafe(IDisposable disposable) { return new AnonymousSafeObserver(_onNext, _onError, _onCompleted, disposable); } } }