Feature #20105
closedIntroduce `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.