internal MessagePipeOptions Without(MessagePipeFlags flags)
        => new MessagePipeOptions(TypeModel ?? TypeModel.DefaultModel, CancellationToken,
                                  Flags & ~flags,
                                  PipeOptions, UserState,
                                  MaxMessageSize
#if DEBUG
                                  , Log
#endif
                                  );
        /// <summary>
        /// Create a new instance
        /// </summary>
        public MessagePipeOptions(TypeModel typeModel    = default, CancellationToken cancellationToken   = default,
                                  MessagePipeFlags flags = MessagePipeFlags.None, PipeOptions pipeOptions = default,
                                  object userState       = default, long maxMessageSize = default
#if DEBUG
                                  , Action <string> log = default
#endif
                                  )
        {
            TypeModel         = typeModel;
            CancellationToken = cancellationToken;
            PipeOptions       = pipeOptions;
            UserState         = userState;
            MaxMessageSize    = maxMessageSize;
            Flags             = flags;
#if DEBUG
            Log = log;
#endif
        }
 internal bool OmitsFlag(MessagePipeFlags flag) => (Flags & flag) == 0;
 internal bool HasFlag(MessagePipeFlags flag) => (Flags & flag) != 0;