/// <summary> /// Converts <paramref name="outputResult"/> to <typeparamref name="TOutput"/> wrapped by <see cref="OutputConvertionResult{TOutput}"/>. /// </summary> /// <param name="outputResult">The original output message to be converted.</param> /// <returns>The wrapper of <typeparamref name="TOutput"/>.</returns> /// <exception cref="ArgumentNullException"><paramref name="outputResult"/> is <c>null</c>.</exception> /// <exception cref="InvalidOperationException">The <paramref name="outputResult"/> can not be converted.</exception> public OutputConvertionResult <TOutput> ConvertToWapper(AliceToolsOutput outputResult) { outputResult.EnsureArgumentNull(nameof(outputResult)); switch (outputResult.State) { case AliceToolsState.Successful: case AliceToolsState.PartlySuccessful: return(new OutputConvertionResult <TOutput>(Convert(outputResult.Output), outputResult.FailReason)); default: throw CreateException(outputResult); } }
/// <summary> /// Converts <paramref name="outputResult"/> to <typeparamref name="TOutput"/>. /// </summary> /// <param name="outputResult">The original output message to be converted.</param> /// <param name="allowPartlySuccessful">Specifies if this convert allows partly successful result.</param> /// <exception cref="ArgumentNullException"><paramref name="outputResult"/> is <c>null</c>.</exception> /// <exception cref="InvalidOperationException">The <paramref name="outputResult"/> can not be converted.</exception> /// <returns>The <typeparamref name="TOutput"/> result of convertion.</returns> public TOutput Convert(AliceToolsOutput outputResult, bool allowPartlySuccessful = false) { outputResult.EnsureArgumentNull(nameof(outputResult)); switch (outputResult.State) { case AliceToolsState.Successful: return(Convert(outputResult.Output)); case AliceToolsState.PartlySuccessful: return(allowPartlySuccessful ? Convert(outputResult.Output) : throw CreateException(outputResult)); default: throw CreateException(outputResult); } }
/// <summary> /// Converts <paramref name="outputResult"/> to <typeparamref name="TOutput"/>. /// </summary> /// <param name="outputResult">The original output message to be converted.</param> /// <param name="allowPartlySuccessful">Specifies if this convert allows partly successful result.</param> /// <exception cref="ArgumentNullException"><paramref name="outputResult"/> is <c>null</c>.</exception> /// <exception cref="InvalidOperationException">The <paramref name="outputResult"/> can not be converted.</exception> /// <returns>The <typeparamref name="TOutput"/> result of convertion.</returns> public async Task <TOutput> ConvertAsync(AliceToolsOutput outputResult, bool allowPartlySuccessful = false) => await Task.Run(() => Convert(outputResult, allowPartlySuccessful)).ConfigureAwait(false);
private InvalidOperationException CreateException(AliceToolsOutput outputResult) { string tips = outputResult.State == AliceToolsState.PartlySuccessful ? "Only partly successful" : "Error"; return(new InvalidOperationException($"{tips}: {outputResult.FailReason}")); }
/// <summary> /// Converts <paramref name="outputResult"/> to <typeparamref name="TOutput"/> wrapped by <see cref="OutputConvertionResult{TOutput}"/>. /// </summary> /// <param name="outputResult">The original output message to be converted.</param> /// <returns>The wrapper of <typeparamref name="TOutput"/>.</returns> /// <exception cref="ArgumentNullException"><paramref name="outputResult"/> is <c>null</c>.</exception> /// <exception cref="InvalidOperationException">The <paramref name="outputResult"/> can not be converted.</exception> public async Task <OutputConvertionResult <TOutput> > ConvertToWapperAsync(AliceToolsOutput outputResult) => await Task.Run(() => ConvertToWapper(outputResult)).ConfigureAwait(false);