< Summary - erichiller/mkmrk.Channels coverage

Information
Class: mkmrk.Channels.BroadcastChannelReaderSource<TData>
Assembly: mkmrk.Channels
File(s): /home/runner/work/mkmrk.Channels/mkmrk.Channels/src/mkmrk.Channels/BroadcastChannel/BroadcastChannelReaderSource.cs
Tag: 161_8859726157
Line coverage
66%
Covered lines: 2
Uncovered lines: 1
Coverable lines: 3
Total lines: 80
Line coverage: 66.6%
Branch coverage
50%
Covered branches: 1
Total branches: 2
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)50%2100%
mkmrk.Channels.IBroadcastChannelReaderSource<TData>.CreateReader()100%10%

File(s)

/home/runner/work/mkmrk.Channels/mkmrk.Channels/src/mkmrk.Channels/BroadcastChannel/BroadcastChannelReaderSource.cs

#LineLine coverage
 1using System.ComponentModel;
 2using System.Diagnostics.CodeAnalysis;
 3using System.Threading.Channels;
 4
 5using JetBrains.Annotations;
 6
 7namespace mkmrk.Channels;
 8
 9/// <inheritdoc cref="IBroadcastChannelReaderSource{TData,TResponse}"/>
 10// [EditorBrowsable(EditorBrowsableState.Never)]
 11public class BroadcastChannelReaderSource<TData, TResponse>
 12    : IBroadcastChannelReaderSource<TData, TResponse>
 13    where TResponse : IBroadcastChannelResponse {
 14
 15    // KILL
 16    // /// <summary>
 17    // /// Reader saved for use when this is being used as an implicit conversion to a reader.
 18    // /// </summary>
 19    // [ SuppressMessage( "Design", "CA1051:Do not declare visible instance fields" ) ]
 20    // protected IBroadcastChannelReader<TData, TResponse>? _reader = null;
 21    private readonly IBroadcastChannelWriter<TData, TResponse> _broadcastChannel;
 22
 23    /// <inheritdoc cref="BroadcastChannelReaderSource{TData,TResponse}" />
 24    // Ideally, only internal code would be able to construct, but a public constructor is needed for dependency injecti
 25    [ EditorBrowsable( EditorBrowsableState.Never ) ]
 26    public BroadcastChannelReaderSource( IBroadcastChannelWriter<TData, TResponse> broadcastChannel )
 27        => _broadcastChannel = broadcastChannel;
 28
 29    /// <inheritdoc cref="BroadcastChannel{TData,TResponse}.CreateReader" />
 30    /// <remarks>
 31    /// The reader returned will always be the same.
 32    /// Only one reader can be allocated from a single <see cref="BroadcastChannelReaderSource{TData,TResponse}"/>.
 33    /// </remarks>
 34    [ PublicAPI ]
 35    public IBroadcastChannelReader<TData, TResponse> CreateReader( ) => _broadcastChannel.CreateReader();
 36
 37    // // TODO: FUTURE? GetResponseChannel doesn't exist yet.
 38    // public ChannelWriter<TResponse> GetResponseChannel( ) => _responseChannel ??= _broadcastChannel.GetResponseChanne
 39
 40    /// <inheritdoc />
 41    [ SuppressMessage( "Design", "CA1033:Interface methods should be callable by child types", Justification = "Only bei
 42    RemoveWriterByHashCode IBroadcastChannelAddReaderProvider<TData>.AddReader( ChannelWriter<TData> reader ) => _broadc
 43
 44    /// <inheritdoc />
 45    IBroadcastChannelReader<TData> IBroadcastChannelReaderSource<TData>.CreateReader( ) => this.CreateReader();
 46
 47    // KILL
 48    // /// <summary>
 49    // /// Enables easy use as <see cref="BroadcastChannelReader{TData,TResponse}"/>
 50    // /// </summary>
 51    // [ SuppressMessage( "Usage", "CA2225:Operator overloads have named alternates" ) ]
 52    // public static implicit operator BroadcastChannelReader<TData, TResponse>( BroadcastChannelReaderSource<TData, TRe
 53    //     ArgumentNullException.ThrowIfNull( src );
 54    //     return ( src._reader ??= src.CreateReader() ) as BroadcastChannelReader<TData, TResponse> ?? ThrowHelper.Thro
 55    // }
 56}
 57
 58/// <inheritdoc cref="IBroadcastChannelReaderSource{TData}"/>
 59[ EditorBrowsable( EditorBrowsableState.Never ) ] // not meant for end user consumption, but the constructor must be acc
 60public class BroadcastChannelReaderSource<TData>
 61    : BroadcastChannelReaderSource<TData, IBroadcastChannelResponse>, IBroadcastChannelReaderSource<TData> {
 62    /// <inheritdoc />
 63    public BroadcastChannelReaderSource( IBroadcastChannelWriter<TData> broadcastChannelWriter ) :
 264        base( broadcastChannelWriter as IBroadcastChannelWriter<TData, IBroadcastChannelResponse>
 265              ?? ThrowHelper.ThrowInvalidCastException<IBroadcastChannelWriter<TData>, IBroadcastChannelWriter<TData, IB
 66
 67
 68    /// <inheritdoc />
 069    IBroadcastChannelReader<TData> IBroadcastChannelReaderSource<TData>.CreateReader( ) => this.CreateReader();
 70
 71    // KILL
 72    // /// <summary>
 73    // /// Enables easy use as <see cref="BroadcastChannelReader{TData,TResponse}"/>
 74    // /// </summary>
 75    // [ SuppressMessage( "Usage", "CA2225:Operator overloads have named alternates" ) ]
 76    // public static implicit operator BroadcastChannelReader<TData>( BroadcastChannelReaderSource<TData> src ) {
 77    //     ArgumentNullException.ThrowIfNull( src );
 78    //     return ( src._reader ??= src.CreateReader() ) as BroadcastChannelReader<TData> ?? ThrowHelper.ThrowInvalidCas
 79    // }
 80}