/// <summary>
 /// The timeout for the overall policy.
 /// </summary>
 /// <param name="sqlStrategyOptions">
 /// The <see cref="SqlStrategyOptions"/> instance.
 /// </param>
 /// <returns>
 /// The configured value if it is not <see langword="null"/>; otherwise,
 /// the default value.
 /// </returns>
 public static TimeSpan OverallTimeout(this SqlStrategyOptions sqlStrategyOptions)
 {
     return((sqlStrategyOptions.OverallTimeout ?? SqlStrategyOptions.Defaults.OverallTimeout) !.Value);
 }
 /// <summary>
 /// Generates sleep durations in an exponential manner.
 /// </summary>
 /// <param name="sqlStrategyOptions">
 /// The <see cref="SqlStrategyOptions"/> instance.
 /// </param>
 /// <returns>
 /// The configured value if it is not <see langword="null"/> otherwise,
 /// the default value.
 /// </returns>
 public static IEnumerable <TimeSpan> ExponentialBackoff(this SqlStrategyOptions sqlStrategyOptions)
 {
     return(Backoff.ExponentialBackoff(TimeSpan.FromSeconds(2), sqlStrategyOptions.RetryCount()));
 }
 /// <summary>
 /// The number of exceptions that are allowed before opening the circuit.
 /// </summary>
 /// <param name="sqlStrategyOptions">
 /// The <see cref="SqlStrategyOptions"/> instance.
 /// </param>
 /// <returns>
 /// The configured value if it is not <see langword="null"/>; otherwise,
 /// the default value.
 /// </returns>
 public static int ExceptionsAllowedBeforeBreaking(this SqlStrategyOptions sqlStrategyOptions)
 {
     return((sqlStrategyOptions.ExceptionsAllowedBeforeBreaking ?? SqlStrategyOptions.Defaults.ExceptionsAllowedBeforeBreaking) !.Value);
 }
 /// <summary>
 /// The duration the circuit will stay open before resetting.
 /// </summary>
 /// <param name="sqlStrategyOptions">
 /// The <see cref="SqlStrategyOptions"/> instance.
 /// </param>
 /// <returns>
 /// The configured value if it is not <see langword="null"/>; otherwise,
 /// the default value.
 /// </returns>
 public static TimeSpan DurationOfBreak(this SqlStrategyOptions sqlStrategyOptions)
 {
     return((sqlStrategyOptions.DurationOfBreak ?? SqlStrategyOptions.Defaults.DurationOfBreak) !.Value);
 }
 /// <summary>
 /// The timeout for each retry.
 /// </summary>
 /// <param name="sqlStrategyOptions">
 /// The <see cref="SqlStrategyOptions"/> instance.
 /// </param>
 /// <returns>
 /// The configured value if it is not <see langword="null"/>; otherwise,
 /// the default value.
 /// </returns>
 public static TimeSpan TimeoutPerRetry(this SqlStrategyOptions sqlStrategyOptions)
 {
     return((sqlStrategyOptions.TimeoutPerRetry ?? SqlStrategyOptions.Defaults.TimeoutPerRetry) !.Value);
 }
 /// <summary>
 /// The retry count.
 /// </summary>
 /// <param name="sqlStrategyOptions">
 /// The <see cref="SqlStrategyOptions"/> instance.
 /// </param>
 /// <returns>
 /// The configured value if it is not <see langword="null"/>; otherwise,
 /// the default value.
 /// </returns>
 public static int RetryCount(this SqlStrategyOptions sqlStrategyOptions)
 {
     return((sqlStrategyOptions.RetryCount ?? SqlStrategyOptions.Defaults.RetryCount) !.Value);
 }