Comments (4)
This changed in #228, which is not in a release yet. The read method style is now def read(b: ByteBuffer): IO[IOException, Int]
, but in the case where we get -1
from the NIO read, the failure is an EOFException
. So it is possible to differentiate the socket being closed, by catching EOFException
, but you have to read the Scaladoc for read
to know about it.
I also added an method eofOption
you can use if you'd rather have the end-of-stream represented explicitly:
/**
* Turns `EOFException` failures into a success with no result.
*/
def eofOption[R, A, E <: Throwable](effect: ZIO[R, E, A]): ZIO[R, E, Option[A]] =
effect.asSome.catchSome {
case _: EOFException => ZIO.none
}
val maybeBytesRead: IO[IOException, Option[Int]] = eofOption(channel.read(buffer))
What do you think of this solution? Your version has the advantage that the end-of-stream is represented explicitly in the type, and will require explicit handling of some kind. This might be better overall, but I thought it might be annoying for code that doesn't need to specially handle end-of-stream.
I'd be happy to swap it around. Have read
return IO[Option[IOException], Int]
, with a convenient way to turn that into IO[IOException, Int]
where the None
failure becomes an EOFException
failure. Interested to hear opinions.
from zio-nio.
I'm happy with that solution 👍
It could still be a bit inconvenient if you compose it with other code that could return an EOFException, but much better than before.
For eofOption
I would prefer to have Option in the error channel, as we can save some allocations that way.
This was also the reason for having the option in the error channel in ZStream.Pull
iirc.
from zio-nio.
Yeah, using the error channel is a good idea, easy change.
from zio-nio.
#255 switches to using the error channel to indicate end-of-stream, and I added a note to the docs about how it works.
from zio-nio.
Related Issues (20)
- channel.read has side effect without type representation HOT 3
- Add test coverage plugin
- Raw socket
- Managed temporary files
- Scala 3 compatibility HOT 2
- Providing a mock Stream that can be used for testing zio-nio functionality w/o requiring files
- InetAddress#byName should be using blocking HOT 1
- Client Socket Example not compiling as is HOT 1
- Upgrade to ZIO 2.0 HOT 2
- zio-nio-core_3 has Scala 2.13 dependencies HOT 3
- Customizable DNS resolution
- Update examples to ZIO 2.0 HOT 3
- Add support for io_uring HOT 1
- trait ScatteringByteOps
- Files.deleteRecursive does not delete recursively HOT 1
- Add Support for ScalaNative HOT 9
- Add Support for ScalaJS
- Concurrent file write causes content overlap HOT 1
- Switch default branch to series/2.x HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from zio-nio.