
Issue #20105 has been updated by ioquatix (Samuel Williams). Status changed from Assigned to Closed In the end, I created a gem for this. I'm okay with using a gem. https://github.com/socketry/io-stream ---------------------------------------- Feature #20105: Introduce `IO::Stream` or something similar. https://bugs.ruby-lang.org/issues/20105#change-113577 * Author: ioquatix (Samuel Williams) * Status: Closed * Assignee: ioquatix (Samuel Williams) ---------------------------------------- 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: ```ruby 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`. -- https://bugs.ruby-lang.org/