/// <inheritdoc/>
        public IObservable <IRecoveryStatusResponse> RestoreObservable(Name repository, Name snapshot, TimeSpan interval, Func <RestoreDescriptor, IRestoreRequest> selector = null)
        {
            var restoreDescriptor = selector.InvokeOrDefault(new RestoreDescriptor(repository, snapshot));
            var observable        = new RestoreObservable(this, restoreDescriptor, interval);

            return(observable);
        }
        /// <inheritdoc />
        public IObservable <IRecoveryStatusResponse> RestoreObservable(TimeSpan interval, IRestoreRequest restoreRequest)
        {
            restoreRequest.ThrowIfNull("restoreRequest");
            var observable = new RestoreObservable(this, restoreRequest);

            return(observable);
        }
        /// <inheritdoc />
        public IObservable <IRecoveryStatusResponse> RestoreObservable(TimeSpan interval, Func <RestoreDescriptor, RestoreDescriptor> restoreSelector = null)
        {
            restoreSelector.ThrowIfNull("restoreSelector");

            var restoreDescriptor = restoreSelector(new RestoreDescriptor());
            var observable        = new RestoreObservable(this, restoreDescriptor);

            return(observable);
        }