< Summary

Information
Class: IceRpc.Slice.Operations.IncomingResponseExtensions
Assembly: IceRpc.Slice
File(s): /home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc.Slice/Operations/IncomingResponseExtensions.cs
Tag: 1321_24790053727
Line coverage
100%
Covered lines: 22
Uncovered lines: 0
Coverable lines: 22
Total lines: 64
Line coverage: 100%
Branch coverage
80%
Covered branches: 8
Total branches: 10
Branch coverage: 80%
Method coverage
100%
Covered methods: 2
Fully covered methods: 2
Total methods: 2
Method coverage: 100%
Full method coverage: 100%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
DecodeReturnValueAsync(...)83.33%66100%
DecodeVoidReturnValueAsync(...)75%44100%

File(s)

/home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc.Slice/Operations/IncomingResponseExtensions.cs

#LineLine coverage
 1// Copyright (c) ZeroC, Inc.
 2
 3using IceRpc.Features;
 4using IceRpc.Slice.Operations.Internal;
 5using ZeroC.Slice.Codec;
 6
 7namespace IceRpc.Slice.Operations;
 8
 9/// <summary>Provides extension methods for <see cref="IncomingResponse" /> to decode its Slice-encoded payload.
 10/// </summary>
 11public static class IncomingResponseExtensions
 12{
 13    /// <summary>Decodes a response payload.</summary>
 14    /// <typeparam name="T">The type of the return value.</typeparam>
 15    /// <param name="response">The incoming response.</param>
 16    /// <param name="request">The outgoing request.</param>
 17    /// <param name="sender">The proxy that sent the request.</param>
 18    /// <param name="decodeReturnValue">A function that decodes the return value.</param>
 19    /// <param name="cancellationToken">A cancellation token that receives the cancellation requests.</param>
 20    /// <returns>A value task that holds the operation's return value.</returns>
 21    /// <exception cref="DispatchException">Thrown when the status code is not <see cref="StatusCode.Ok"/>.</exception>
 22    public static ValueTask<T> DecodeReturnValueAsync<T>(
 23        this IncomingResponse response,
 24        OutgoingRequest request,
 25        ISliceProxy sender,
 26        DecodeFunc<T> decodeReturnValue,
 27        CancellationToken cancellationToken = default)
 6828    {
 6829        ISliceFeature feature = request.Features.Get<ISliceFeature>() ?? SliceFeature.Default;
 30
 6831        return response.StatusCode == StatusCode.Ok ?
 6832            response.DecodeValueAsync(
 6833                    feature,
 6834                    feature.BaseProxy ?? sender,
 6835                    decodeReturnValue,
 6836                    cancellationToken) :
 6837            throw new DispatchException(response.StatusCode, response.ErrorMessage)
 6838            {
 6839                ConvertToInternalError = true
 6840            };
 6741    }
 42
 43    /// <summary>Verifies that a Slice-encoded response payload carries no return value or only tagged return values.
 44    /// </summary>
 45    /// <param name="response">The incoming response.</param>
 46    /// <param name="request">The outgoing request.</param>
 47    /// <param name="cancellationToken">A cancellation token that receives the cancellation requests.</param>
 48    /// <returns>A value task representing the asynchronous completion of the operation.</returns>
 49    /// <exception cref="DispatchException">Thrown when the status code is not <see cref="StatusCode.Ok"/>.</exception>
 50    public static ValueTask DecodeVoidReturnValueAsync(
 51        this IncomingResponse response,
 52        OutgoingRequest request,
 53        CancellationToken cancellationToken = default)
 2154    {
 2155        ISliceFeature feature = request.Features.Get<ISliceFeature>() ?? SliceFeature.Default;
 56
 2157        return response.StatusCode == StatusCode.Ok ?
 2158            response.DecodeVoidAsync(feature, cancellationToken) :
 2159            throw new DispatchException(response.StatusCode, response.ErrorMessage)
 2160            {
 2161                ConvertToInternalError = true
 2162            };
 2063    }
 64}