using System; using System.Collections.Generic; using UniRx.Operators; namespace UniRx { public static partial class Observable { public static IObservable AsObservable(this IObservable source) { if (source == null) throw new ArgumentNullException("source"); // optimize, don't double wrap if (source is UniRx.Operators.AsObservableObservable) { return source; } return new AsObservableObservable(source); } public static IObservable ToObservable(this IEnumerable source) { return ToObservable(source, Scheduler.DefaultSchedulers.Iteration); } public static IObservable ToObservable(this IEnumerable source, IScheduler scheduler) { return new ToObservableObservable(source, scheduler); } public static IObservable Cast(this IObservable source) { return new CastObservable(source); } /// /// witness is for type inference. /// public static IObservable Cast(this IObservable source, TResult witness) { return new CastObservable(source); } public static IObservable OfType(this IObservable source) { return new OfTypeObservable(source); } /// /// witness is for type inference. /// public static IObservable OfType(this IObservable source, TResult witness) { return new OfTypeObservable(source); } /// /// Converting .Select(_ => Unit.Default) sequence. /// public static IObservable AsUnitObservable(this IObservable source) { return new AsUnitObservableObservable(source); } /// /// Same as LastOrDefault().AsUnitObservable(). /// public static IObservable AsSingleUnitObservable(this IObservable source) { return new AsSingleUnitObservableObservable(source); } } }