public static Session <S, E, P> Send <S, E, P>(this Session <Send <S>, E, P> session) where S : SessionType where E : SessionStack where P : ProtocolType { if (session is null) { throw new ArgumentNullException(nameof(session)); } session.Send(); return(session.ToNextSession <S>()); }