For posterity, here’s how to initialize a StringStream subclass. It’s a hack,
but it works, and I don’t believe it’s possible to do any better without API
changes in the `streams` package.
type
MyStreamClass* = object of StringStreamObj
myData: int
MyStream* = ref MyStreamClass
proc newMyStream* (input: sink string ="", myData: int) : MyStream =
result = MyStream(myData: myData)
# HACK: Initialize MyStream's StringStream base by copying over an
initialized
# StringStream. Necessary bc there is no `initStringStream(var
StringStream)` function.
var ss = newStringStream(input)
result.data = ss.data
result.closeImpl = ss.closeImpl
result.atEndImpl = ss.atEndImpl
result.setPositionImpl = ss.setPositionImpl
result.getPositionImpl = ss.getPositionImpl
result.readDataStrImpl = ss.readDataStrImpl
result.readDataImpl = ss.readDataImpl
result.peekDataImpl = ss.peekDataImpl
result.writeDataImpl = ss.writeDataImpl
Run