Feature #20105
openIntroduce `IO::Stream` or something similar.
Description
Ruby's IO class has a general model for streaming IO, including some hidden classes like IO::generic_readable
and IO::generic_writable
.
As Ruby's core IO classes evolve, gems like openssl
(see OpenSSL::Buffering
) need to be updated to support changes to the interface.
As it stands, there are changes in IO
which are not copied to OpenSSL::Buffering
. I'd like to propose we introduce some shared interface for streams that is used by IO
, Socket
, and OpenSSL
to start with. The general interface would be similar to IO
and allow code like OpenSSL
to avoid re-implementing the IO
interface.
I don't have a strong idea for the interface yet, but it would probably look something like this:
class IO::Stream
def initialize(io, buffered: true)
end
def read(size, buffer=nil)
end
def write(size, buffer=nil)
end
# Include general operations from IO, like gets, puts, etc
end
I think ideally we'd try implement with pure Ruby and a first goal would be to replace OpenSSL::Buffering
.