@zio.dev/zio-blocks 0.0.55 → 0.0.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/guides/async-getting-started.md +1 -1
- package/guides/query-dsl-extending.md +1 -1
- package/guides/query-dsl-fluent-builder.md +1 -1
- package/guides/query-dsl-reified-optics.md +1 -1
- package/guides/query-dsl-sql.md +1 -1
- package/guides/telemetry-guide.md +3 -3
- package/guides/zio-schema-migration.md +6 -6
- package/index.md +58 -34
- package/package.json +1 -1
- package/reference/async.md +2 -2
- package/reference/chunk.md +3 -3
- package/reference/codegen/index.md +1 -1
- package/reference/combinators.md +4 -4
- package/reference/config/config-source.md +2 -2
- package/reference/config/formats.md +3 -3
- package/reference/config/index.md +7 -7
- package/reference/config/rollout.md +1 -1
- package/reference/context.md +1 -1
- package/reference/data-migration.md +1 -1
- package/reference/datastar/index.md +2 -2
- package/reference/datastar.md +2 -2
- package/reference/docs.md +2 -2
- package/reference/endpoint/endpoint.md +1 -0
- package/reference/endpoint/index.md +4 -4
- package/reference/html.md +2 -2
- package/reference/htmx/index.md +2 -2
- package/reference/http-model/model.md +2 -2
- package/reference/http-model/schema-codecs.md +1 -1
- package/reference/http-model/schema.md +2 -2
- package/reference/jwt.md +1 -1
- package/reference/maybe.md +2 -2
- package/reference/media-type.md +2 -2
- package/reference/mux.mdx +2 -2
- package/reference/openapi.md +3 -3
- package/reference/projection.md +3 -3
- package/reference/resource-management/index.md +1 -1
- package/reference/resource-management/resource.md +2 -2
- package/reference/resource-management/scope.md +1 -1
- package/reference/resource-management/wire.md +2 -2
- package/reference/ringbuffer/index.mdx +2 -2
- package/reference/schema/built-in-codecs/avro.md +2 -2
- package/reference/schema/built-in-codecs/bson.md +9 -9
- package/reference/schema/built-in-codecs/csv.md +2 -2
- package/reference/schema/built-in-codecs/json/index.md +2 -2
- package/reference/schema/built-in-codecs/json/json.md +1 -0
- package/reference/schema/built-in-codecs/messagepack.md +3 -3
- package/reference/schema/built-in-codecs/thrift.md +2 -2
- package/reference/schema/built-in-codecs/toon.md +3 -3
- package/reference/schema/built-in-codecs/yaml.md +2 -2
- package/reference/schema/codec.md +10 -10
- package/reference/schema/dynamic-schema.md +3 -3
- package/reference/schema/schema-evolution/as.md +4 -4
- package/reference/schema/schema-evolution/into.md +2 -2
- package/reference/schema/schema-expr.md +2 -2
- package/reference/schema/type-class-derivation.md +1 -1
- package/reference/smithy.md +1 -1
- package/reference/sql/db-codec-deriver.md +3 -3
- package/reference/sql/db-codec.md +11 -11
- package/reference/sql/db-con.md +4 -4
- package/reference/sql/db-connection.md +1 -1
- package/reference/sql/db-tx.md +2 -2
- package/reference/sql/ddl.md +1 -1
- package/reference/sql/index.md +6 -6
- package/reference/sql/repo.md +5 -5
- package/reference/sql/sql-dialect.md +1 -1
- package/reference/sql/sql-logger.md +1 -1
- package/reference/sql/sql-name-mapper.md +3 -3
- package/reference/sql/table-metadata.md +3 -3
- package/reference/sql/table.md +10 -10
- package/reference/sql/transactor-zio.md +1 -1
- package/reference/sql/transactor.md +8 -8
- package/reference/sql-zio.md +2 -2
- package/reference/streams/core/pipeline.md +17 -17
- package/reference/streams/core/sink.md +4 -4
- package/reference/streams/core/stream.md +3 -3
- package/reference/streams/execution-and-compatibility/async-execution.md +1 -1
- package/reference/streams/index.md +3 -3
- package/reference/streams/primitives/reader.md +25 -25
- package/reference/streams/primitives/writer.md +18 -18
- package/reference/telemetry/index.md +3 -3
- package/reference/telemetry/otel/index.md +1 -1
- package/sidebars.js +261 -219
- package/reference/mux.md +0 -254
|
@@ -633,7 +633,7 @@ import zio.blocks.streams.*
|
|
|
633
633
|
import java.io.ByteArrayInputStream
|
|
634
634
|
|
|
635
635
|
val data = new ByteArrayInputStream("Hello".getBytes)
|
|
636
|
-
// data: ByteArrayInputStream = java.io.ByteArrayInputStream@
|
|
636
|
+
// data: ByteArrayInputStream = java.io.ByteArrayInputStream@461f0ea1
|
|
637
637
|
val bytes = Stream.fromInputStream(data)
|
|
638
638
|
// bytes: Stream[IOException, Byte] = Stream.fromAcquireRelease(...)
|
|
639
639
|
val result = bytes.runCollect
|
|
@@ -659,7 +659,7 @@ import zio.blocks.streams.*
|
|
|
659
659
|
import java.io.StringReader
|
|
660
660
|
|
|
661
661
|
val reader = new StringReader("hello world")
|
|
662
|
-
// reader: StringReader = java.io.StringReader@
|
|
662
|
+
// reader: StringReader = java.io.StringReader@1f2290ef
|
|
663
663
|
val stream = Stream.fromJavaReader(reader)
|
|
664
664
|
// stream: Stream[IOException, Char] = Stream.fromAcquireRelease(...)
|
|
665
665
|
val result = stream.runCollect
|
|
@@ -2494,7 +2494,7 @@ import zio.blocks.streams.*
|
|
|
2494
2494
|
val nums = Stream(1, 2, 3, 4, 5)
|
|
2495
2495
|
// nums: Stream[Nothing, Int] = Stream(1, 2, 3, 4, 5)
|
|
2496
2496
|
val pipe = Pipeline.filter((x: Int) => x > 2).andThen(Pipeline.map((x: Int) => x * 10))
|
|
2497
|
-
// pipe: Pipeline[Int, Int] = zio.blocks.streams.Pipeline$Composed@
|
|
2497
|
+
// pipe: Pipeline[Int, Int] = zio.blocks.streams.Pipeline$Composed@7f645c3b
|
|
2498
2498
|
val result = nums.via(pipe).runCollect
|
|
2499
2499
|
// result: Either[Nothing, Chunk[Int]] = Right(IndexedSeq(30, 40, 50))
|
|
2500
2500
|
```
|
|
@@ -36,7 +36,7 @@ Every asynchronous addition follows one naming convention: the synchronous name
|
|
|
36
36
|
The streams module carries the asynchronous effect type with it — `zio-blocks-streams` depends on `zio-blocks-async`, so one coordinate is all you add:
|
|
37
37
|
|
|
38
38
|
```scala
|
|
39
|
-
libraryDependencies += "dev.zio" %%% "zio-blocks-streams" % "0.0.
|
|
39
|
+
libraryDependencies += "dev.zio" %%% "zio-blocks-streams" % "0.0.56"
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
Use `%%%` in a cross-built project so the same line resolves for both JVM and Scala.js; `%%` is enough for a JVM-only build.
|
|
@@ -48,13 +48,13 @@ val result = stream.take(5).runCollect
|
|
|
48
48
|
Add the Streams module to your SBT build:
|
|
49
49
|
|
|
50
50
|
```scala
|
|
51
|
-
libraryDependencies += "dev.zio" %% "zio-blocks-streams" % "0.0.
|
|
51
|
+
libraryDependencies += "dev.zio" %% "zio-blocks-streams" % "0.0.56"
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
For Scala.js (JavaScript/Node.js):
|
|
55
55
|
|
|
56
56
|
```scala
|
|
57
|
-
libraryDependencies += "dev.zio" %%% "zio-blocks-streams" % "0.0.
|
|
57
|
+
libraryDependencies += "dev.zio" %%% "zio-blocks-streams" % "0.0.56"
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
Supported Scala versions: 2.13.x and 3.x.
|
|
@@ -723,4 +723,4 @@ Stream.fromIterable(List("10", "abc", "-3", "7", "0", "25"))
|
|
|
723
723
|
- [Platform Differences](./execution-and-compatibility/platform-differences.md) -- which members exist on the JVM, on Scala.js, and on both
|
|
724
724
|
- [Zero-Boxing Streams](./execution-and-compatibility/zero-boxing.md) -- the primitive lanes and how one is chosen
|
|
725
725
|
- [Async](../async.md) -- the `Async` effect type the cross-platform terminals return
|
|
726
|
-
- [Mux](../mux.
|
|
726
|
+
- [Mux](../mux.mdx) -- coordinating many keyed streams over one shared transport
|
|
@@ -76,7 +76,7 @@ import zio.blocks.chunk.Chunk
|
|
|
76
76
|
import scala.collection.mutable.Buffer
|
|
77
77
|
|
|
78
78
|
val r = Reader.fromChunk(Chunk(1, 2, 3, 4, 5))
|
|
79
|
-
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@
|
|
79
|
+
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@72d71007
|
|
80
80
|
val collected = Buffer[Int]()
|
|
81
81
|
// collected: Buffer[Int] = ArrayBuffer(1, 2, 3, 4, 5)
|
|
82
82
|
|
|
@@ -260,7 +260,7 @@ Here's how to create and use a closed reader:
|
|
|
260
260
|
import zio.blocks.streams.io.Reader
|
|
261
261
|
|
|
262
262
|
val r = Reader.closed
|
|
263
|
-
// r: SyncReader[Nothing] = zio.blocks.streams.io.Reader$ClosedReader$@
|
|
263
|
+
// r: SyncReader[Nothing] = zio.blocks.streams.io.Reader$ClosedReader$@37ab4fcf
|
|
264
264
|
println(r.isClosed) // true
|
|
265
265
|
// true
|
|
266
266
|
println(r.read(-1)) // -1 (the sentinel)
|
|
@@ -286,7 +286,7 @@ import zio.blocks.chunk.Chunk
|
|
|
286
286
|
val chunk = Chunk(10, 20, 30)
|
|
287
287
|
// chunk: Chunk[Int] = IndexedSeq(10, 20, 30)
|
|
288
288
|
val r = Reader.fromChunk(chunk)
|
|
289
|
-
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@
|
|
289
|
+
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@61eb43ca
|
|
290
290
|
|
|
291
291
|
def drain(): Unit = {
|
|
292
292
|
val v = r.read(-1)
|
|
@@ -318,7 +318,7 @@ import zio.blocks.streams.io.Reader
|
|
|
318
318
|
val list = List("a", "b", "c")
|
|
319
319
|
// list: List[String] = List("a", "b", "c")
|
|
320
320
|
val r = Reader.fromIterable(list)
|
|
321
|
-
// r: SyncReader[String] = zio.blocks.streams.io.Reader$FromIterable@
|
|
321
|
+
// r: SyncReader[String] = zio.blocks.streams.io.Reader$FromIterable@58ab88aa
|
|
322
322
|
|
|
323
323
|
def drain(): Unit = {
|
|
324
324
|
val v = r.read(null)
|
|
@@ -348,7 +348,7 @@ Create a reader from a range and drain the integers:
|
|
|
348
348
|
import zio.blocks.streams.io.Reader
|
|
349
349
|
|
|
350
350
|
val r = Reader.fromRange(1 to 5)
|
|
351
|
-
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromRange@
|
|
351
|
+
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromRange@28012030
|
|
352
352
|
|
|
353
353
|
def drain(): Unit = {
|
|
354
354
|
val v = r.read(-1)
|
|
@@ -757,7 +757,7 @@ Create and read from a single-element reference-type reader with a custom sentin
|
|
|
757
757
|
import zio.blocks.streams.io.Reader
|
|
758
758
|
|
|
759
759
|
val r = Reader.single("hello")
|
|
760
|
-
// r: SyncReader[String] = zio.blocks.streams.io.Reader$SingletonGeneric@
|
|
760
|
+
// r: SyncReader[String] = zio.blocks.streams.io.Reader$SingletonGeneric@65f1d92c
|
|
761
761
|
val sentinel = "END"
|
|
762
762
|
// sentinel: String = "END"
|
|
763
763
|
println(r.read(sentinel)) // hello
|
|
@@ -772,7 +772,7 @@ For primitive types, use the specialized factory and read methods. `SyncReader#r
|
|
|
772
772
|
import zio.blocks.streams.io.Reader
|
|
773
773
|
|
|
774
774
|
val r = Reader.singleInt(100)
|
|
775
|
-
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$SingletonPrim@
|
|
775
|
+
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$SingletonPrim@63751c80
|
|
776
776
|
val sentinel = Long.MinValue
|
|
777
777
|
// sentinel: Long = -9223372036854775808L
|
|
778
778
|
val v1 = r.readInt(sentinel)
|
|
@@ -801,7 +801,7 @@ Create an infinite reader that repeatedly emits the same value:
|
|
|
801
801
|
import zio.blocks.streams.io.Reader
|
|
802
802
|
|
|
803
803
|
val r = Reader.repeat(1)
|
|
804
|
-
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$SingletonPrim@
|
|
804
|
+
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$SingletonPrim@5003d04d
|
|
805
805
|
|
|
806
806
|
def drainN(n: Int): Unit = {
|
|
807
807
|
if (n > 0) {
|
|
@@ -845,7 +845,7 @@ import zio.blocks.streams.io.Reader
|
|
|
845
845
|
val r = Reader.unfold(1) { s =>
|
|
846
846
|
if (s > 3) None else Some((s, s + 1))
|
|
847
847
|
}
|
|
848
|
-
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$Unfold@
|
|
848
|
+
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$Unfold@28e9841a
|
|
849
849
|
|
|
850
850
|
def drain(): Unit = {
|
|
851
851
|
val v = r.read(-1)
|
|
@@ -914,7 +914,7 @@ import zio.blocks.streams.io.Reader
|
|
|
914
914
|
import zio.blocks.chunk.Chunk
|
|
915
915
|
|
|
916
916
|
val r = Reader.fromChunk(Chunk(10, 20))
|
|
917
|
-
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@
|
|
917
|
+
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@2cb36210
|
|
918
918
|
val v1 = r.read(-1) // 10
|
|
919
919
|
// v1: Int = 10
|
|
920
920
|
val v2 = r.read(-1) // 20
|
|
@@ -990,7 +990,7 @@ import zio.blocks.streams.io.Reader
|
|
|
990
990
|
import zio.blocks.chunk.Chunk
|
|
991
991
|
|
|
992
992
|
val r = Reader.fromChunk(Chunk(10, 20, 30))
|
|
993
|
-
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@
|
|
993
|
+
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@412d60e3
|
|
994
994
|
val sentinel = Long.MinValue
|
|
995
995
|
// sentinel: Long = -9223372036854775808L
|
|
996
996
|
|
|
@@ -1021,9 +1021,9 @@ import java.io.ByteArrayInputStream
|
|
|
1021
1021
|
val bytes = Array[Byte](72, 101, 108, 108, 111) // Hello in ASCII bytes
|
|
1022
1022
|
// bytes: Array[Byte] = Array(72, 101, 108, 108, 111)
|
|
1023
1023
|
val is = new ByteArrayInputStream(bytes)
|
|
1024
|
-
// is: ByteArrayInputStream = java.io.ByteArrayInputStream@
|
|
1024
|
+
// is: ByteArrayInputStream = java.io.ByteArrayInputStream@5196ddfa
|
|
1025
1025
|
val r = Reader.fromInputStream(is)
|
|
1026
|
-
// r: SyncReader[Byte] = zio.blocks.streams.io.Reader$InputStreamReader@
|
|
1026
|
+
// r: SyncReader[Byte] = zio.blocks.streams.io.Reader$InputStreamReader@795c948d
|
|
1027
1027
|
|
|
1028
1028
|
def drainBytes(): Unit = {
|
|
1029
1029
|
val b = r.readByte()
|
|
@@ -1074,9 +1074,9 @@ import java.io.ByteArrayInputStream
|
|
|
1074
1074
|
val bytes = Array[Byte](72, 101, 108, 108, 111) // The word Hello
|
|
1075
1075
|
// bytes: Array[Byte] = Array(72, 101, 108, 108, 111)
|
|
1076
1076
|
val is = new ByteArrayInputStream(bytes)
|
|
1077
|
-
// is: ByteArrayInputStream = java.io.ByteArrayInputStream@
|
|
1077
|
+
// is: ByteArrayInputStream = java.io.ByteArrayInputStream@267e1357
|
|
1078
1078
|
val r = Reader.fromInputStream(is)
|
|
1079
|
-
// r: SyncReader[Byte] = zio.blocks.streams.io.Reader$InputStreamReader@
|
|
1079
|
+
// r: SyncReader[Byte] = zio.blocks.streams.io.Reader$InputStreamReader@13a2b7a2
|
|
1080
1080
|
|
|
1081
1081
|
val buffer = new Array[Byte](3)
|
|
1082
1082
|
// buffer: Array[Byte] = Array(108, 111, 108)
|
|
@@ -1156,7 +1156,7 @@ import zio.blocks.streams.io.Reader
|
|
|
1156
1156
|
import zio.blocks.chunk.Chunk
|
|
1157
1157
|
|
|
1158
1158
|
val r = Reader.fromChunk(Chunk(10, 20, 30))
|
|
1159
|
-
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@
|
|
1159
|
+
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@71f34e37
|
|
1160
1160
|
val all = r.readAll()
|
|
1161
1161
|
// all: Chunk[Int] = IndexedSeq(10, 20, 30)
|
|
1162
1162
|
println(all) // Chunk(10,20,30)
|
|
@@ -1226,7 +1226,7 @@ import zio.blocks.streams.io.Reader
|
|
|
1226
1226
|
import zio.blocks.chunk.Chunk
|
|
1227
1227
|
|
|
1228
1228
|
val r = Reader.fromChunk(Chunk(1, 2))
|
|
1229
|
-
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@
|
|
1229
|
+
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@289d0f41
|
|
1230
1230
|
println(r.readable()) // true
|
|
1231
1231
|
// true
|
|
1232
1232
|
r.read(-1)
|
|
@@ -1395,11 +1395,11 @@ import zio.blocks.streams.io.Reader
|
|
|
1395
1395
|
import zio.blocks.chunk.Chunk
|
|
1396
1396
|
|
|
1397
1397
|
val r1 = Reader.fromChunk(Chunk(1, 2))
|
|
1398
|
-
// r1: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@
|
|
1398
|
+
// r1: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@21bb3acc
|
|
1399
1399
|
val r2 = Reader.fromChunk(Chunk(3, 4))
|
|
1400
|
-
// r2: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@
|
|
1400
|
+
// r2: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@883375
|
|
1401
1401
|
val combined = r1 ++ r2
|
|
1402
|
-
// combined: SyncReader[Int] = zio.blocks.streams.io.Reader$ConcatReader@
|
|
1402
|
+
// combined: SyncReader[Int] = zio.blocks.streams.io.Reader$ConcatReader@10f054e8
|
|
1403
1403
|
|
|
1404
1404
|
def drain(): Unit = {
|
|
1405
1405
|
val v = combined.read(-1)
|
|
@@ -1463,7 +1463,7 @@ val r = Reader.fromChunk(Chunk(1, 2)).withRelease { () =>
|
|
|
1463
1463
|
cleanupRef += "cleaned"
|
|
1464
1464
|
println("Cleaned up")
|
|
1465
1465
|
}
|
|
1466
|
-
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$SyncReader$$anon$3@
|
|
1466
|
+
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$SyncReader$$anon$3@a88df6f
|
|
1467
1467
|
|
|
1468
1468
|
r.close()
|
|
1469
1469
|
// Cleaned up
|
|
@@ -1494,7 +1494,7 @@ import zio.blocks.streams.io.Reader
|
|
|
1494
1494
|
import zio.blocks.chunk.Chunk
|
|
1495
1495
|
|
|
1496
1496
|
val r = Reader.fromChunk(Chunk(1, 2, 3, 4, 5))
|
|
1497
|
-
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@
|
|
1497
|
+
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@1cff5dd5
|
|
1498
1498
|
val handled = r.setSkip(2)
|
|
1499
1499
|
// handled: Boolean = true
|
|
1500
1500
|
println(s"Skip handled natively: $handled")
|
|
@@ -1537,7 +1537,7 @@ import zio.blocks.streams.io.Reader
|
|
|
1537
1537
|
import zio.blocks.chunk.Chunk
|
|
1538
1538
|
|
|
1539
1539
|
val r = Reader.fromChunk(Chunk(1, 2, 3, 4, 5))
|
|
1540
|
-
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@
|
|
1540
|
+
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@305462a2
|
|
1541
1541
|
val handled = r.setLimit(3)
|
|
1542
1542
|
// handled: Boolean = true
|
|
1543
1543
|
println(s"Limit handled natively: $handled")
|
|
@@ -1579,7 +1579,7 @@ Set repeat mode so a reader restarts instead of closing. Not every reader can do
|
|
|
1579
1579
|
import zio.blocks.streams.io.Reader
|
|
1580
1580
|
|
|
1581
1581
|
val r = Reader.single(1)
|
|
1582
|
-
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$SingletonPrim@
|
|
1582
|
+
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$SingletonPrim@6f7050db
|
|
1583
1583
|
val handled = r.setRepeat()
|
|
1584
1584
|
// handled: Boolean = true
|
|
1585
1585
|
println(s"Repeat handled natively: $handled")
|
|
@@ -1626,7 +1626,7 @@ import zio.blocks.streams.io.Reader
|
|
|
1626
1626
|
import zio.blocks.chunk.Chunk
|
|
1627
1627
|
|
|
1628
1628
|
val r = Reader.fromChunk(Chunk(1, 2, 3))
|
|
1629
|
-
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@
|
|
1629
|
+
// r: SyncReader[Int] = zio.blocks.streams.io.Reader$FromChunkInt@43a3be3c
|
|
1630
1630
|
println(r.read(-1)) // 1
|
|
1631
1631
|
// 1
|
|
1632
1632
|
r.reset()
|
|
@@ -63,7 +63,7 @@ val w = new Writer[Int] {
|
|
|
63
63
|
override def fail(error: Throwable) = close()
|
|
64
64
|
override def writeable() = !isClosed
|
|
65
65
|
}
|
|
66
|
-
// w: Writer[Int] = repl.MdocSession$MdocApp0$$anon$2@
|
|
66
|
+
// w: Writer[Int] = repl.MdocSession$MdocApp0$$anon$2@6cb38411
|
|
67
67
|
|
|
68
68
|
// Push elements, checking writeable() before each write
|
|
69
69
|
def pushAll(elements: List[Int]): Unit = {
|
|
@@ -91,7 +91,7 @@ The fundamental protocol is: call `write(element)` to push an element. It return
|
|
|
91
91
|
import zio.blocks.streams.io.Writer
|
|
92
92
|
|
|
93
93
|
val w = Writer.single[Int]
|
|
94
|
-
// w: Writer[Int] = zio.blocks.streams.io.Writer$SingleWriter@
|
|
94
|
+
// w: Writer[Int] = zio.blocks.streams.io.Writer$SingleWriter@2086fd7a
|
|
95
95
|
println(s"First write: ${w.write(42)}") // true (accepted)
|
|
96
96
|
// First write: true
|
|
97
97
|
println(s"Second write: ${w.write(99)}") // false (writer auto-closed after one element)
|
|
@@ -200,7 +200,7 @@ class ErrorStoringWriter extends Writer[Int] {
|
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
val w = new ErrorStoringWriter()
|
|
203
|
-
// w: ErrorStoringWriter = repl.MdocSession$MdocApp9$ErrorStoringWriter@
|
|
203
|
+
// w: ErrorStoringWriter = repl.MdocSession$MdocApp9$ErrorStoringWriter@2cf0305a
|
|
204
204
|
w.fail(new Exception("Stream error"))
|
|
205
205
|
try {
|
|
206
206
|
w.write(42) // throws the stored error
|
|
@@ -232,7 +232,7 @@ Create a pre-closed writer that rejects all writes:
|
|
|
232
232
|
import zio.blocks.streams.io.Writer
|
|
233
233
|
|
|
234
234
|
val w = Writer.closed
|
|
235
|
-
// w: Writer[Any] = zio.blocks.streams.io.Writer$$anon$1@
|
|
235
|
+
// w: Writer[Any] = zio.blocks.streams.io.Writer$$anon$1@475df1d1
|
|
236
236
|
println(w.write(42)) // false (closed)
|
|
237
237
|
// false
|
|
238
238
|
println(w.isClosed) // true
|
|
@@ -255,7 +255,7 @@ Create a writer that accepts exactly one element, then auto-closes:
|
|
|
255
255
|
import zio.blocks.streams.io.Writer
|
|
256
256
|
|
|
257
257
|
val w = Writer.single[Int]
|
|
258
|
-
// w: Writer[Int] = zio.blocks.streams.io.Writer$SingleWriter@
|
|
258
|
+
// w: Writer[Int] = zio.blocks.streams.io.Writer$SingleWriter@1959620c
|
|
259
259
|
println(w.write(42)) // true
|
|
260
260
|
// true
|
|
261
261
|
println(w.write(99)) // false (already accepted one element)
|
|
@@ -291,10 +291,10 @@ val inner = new Writer[Int] {
|
|
|
291
291
|
def write(a: Int) = { collected += a; true }
|
|
292
292
|
def close() = ()
|
|
293
293
|
}
|
|
294
|
-
// inner: Writer[Int] = repl.MdocSession$MdocApp19$$anon$23@
|
|
294
|
+
// inner: Writer[Int] = repl.MdocSession$MdocApp19$$anon$23@31c126b0
|
|
295
295
|
|
|
296
296
|
val limited = Writer.limited(inner, 2)
|
|
297
|
-
// limited: Writer[Int] = zio.blocks.streams.io.Writer$LimitedWriter@
|
|
297
|
+
// limited: Writer[Int] = zio.blocks.streams.io.Writer$LimitedWriter@2c2c5703
|
|
298
298
|
println(limited.write(1)) // true
|
|
299
299
|
// true
|
|
300
300
|
println(limited.write(2)) // true (space available)
|
|
@@ -345,7 +345,7 @@ Write elements and observe the return value indicating success or closure:
|
|
|
345
345
|
import zio.blocks.streams.io.Writer
|
|
346
346
|
|
|
347
347
|
val w = Writer.single[Int]
|
|
348
|
-
// w: Writer[Int] = zio.blocks.streams.io.Writer$SingleWriter@
|
|
348
|
+
// w: Writer[Int] = zio.blocks.streams.io.Writer$SingleWriter@40fc0d5d
|
|
349
349
|
val result1 = w.write(42)
|
|
350
350
|
// result1: Boolean = true
|
|
351
351
|
val result2 = w.write(99) // false, already closed
|
|
@@ -371,7 +371,7 @@ import zio.blocks.streams.io.Writer
|
|
|
371
371
|
import zio.blocks.chunk.Chunk
|
|
372
372
|
|
|
373
373
|
val w = Writer.single[Int]
|
|
374
|
-
// w: Writer[Int] = zio.blocks.streams.io.Writer$SingleWriter@
|
|
374
|
+
// w: Writer[Int] = zio.blocks.streams.io.Writer$SingleWriter@3d1c8bf6
|
|
375
375
|
val chunk = Chunk(1, 2, 3)
|
|
376
376
|
// chunk: Chunk[Int] = IndexedSeq(1, 2, 3)
|
|
377
377
|
val remaining = w.writeAll(chunk)
|
|
@@ -482,7 +482,7 @@ Check writer capacity before writing:
|
|
|
482
482
|
import zio.blocks.streams.io.Writer
|
|
483
483
|
|
|
484
484
|
val w = Writer.single[Int]
|
|
485
|
-
// w: Writer[Int] = zio.blocks.streams.io.Writer$SingleWriter@
|
|
485
|
+
// w: Writer[Int] = zio.blocks.streams.io.Writer$SingleWriter@71a80be
|
|
486
486
|
println(w.writeable()) // true
|
|
487
487
|
// true
|
|
488
488
|
w.write(42)
|
|
@@ -529,17 +529,17 @@ val w1 = new Writer[Int] {
|
|
|
529
529
|
}
|
|
530
530
|
def close() = ()
|
|
531
531
|
}
|
|
532
|
-
// w1: Writer[Int] = repl.MdocSession$MdocApp32$$anon$43@
|
|
532
|
+
// w1: Writer[Int] = repl.MdocSession$MdocApp32$$anon$43@2b669ef3
|
|
533
533
|
|
|
534
534
|
val w2 = new Writer[Int] {
|
|
535
535
|
def isClosed = false
|
|
536
536
|
def write(a: Int) = { collected += a * 10; true }
|
|
537
537
|
def close() = ()
|
|
538
538
|
}
|
|
539
|
-
// w2: Writer[Int] = repl.MdocSession$MdocApp32$$anon$45@
|
|
539
|
+
// w2: Writer[Int] = repl.MdocSession$MdocApp32$$anon$45@30a331ff
|
|
540
540
|
|
|
541
541
|
val combined = w1 ++ w2
|
|
542
|
-
// combined: Writer[Int] = zio.blocks.streams.io.Writer$ConcatWith@
|
|
542
|
+
// combined: Writer[Int] = zio.blocks.streams.io.Writer$ConcatWith@21dd14f1
|
|
543
543
|
combined.write(5)
|
|
544
544
|
// res33: Boolean = true
|
|
545
545
|
combined.write(20) // first writer rejects, switches to second
|
|
@@ -568,10 +568,10 @@ val stringWriter = new Writer[String] {
|
|
|
568
568
|
def write(a: String) = { println(s"Writing: $a"); true }
|
|
569
569
|
def close() = ()
|
|
570
570
|
}
|
|
571
|
-
// stringWriter: Writer[String] = repl.MdocSession$MdocApp36$$anon$51@
|
|
571
|
+
// stringWriter: Writer[String] = repl.MdocSession$MdocApp36$$anon$51@31113f62
|
|
572
572
|
|
|
573
573
|
val intWriter = stringWriter.contramap[Int](_.toString)
|
|
574
|
-
// intWriter: Writer[Int] = zio.blocks.streams.io.Writer$Contramapped@
|
|
574
|
+
// intWriter: Writer[Int] = zio.blocks.streams.io.Writer$Contramapped@6a721b4f
|
|
575
575
|
intWriter.write(42) // Prints: Writing: 42
|
|
576
576
|
// Writing: 42
|
|
577
577
|
// res37: Boolean = true
|
|
@@ -607,7 +607,7 @@ Close a writer with an error:
|
|
|
607
607
|
import zio.blocks.streams.io.Writer
|
|
608
608
|
|
|
609
609
|
val w = Writer.single[Int]
|
|
610
|
-
// w: Writer[Int] = zio.blocks.streams.io.Writer$SingleWriter@
|
|
610
|
+
// w: Writer[Int] = zio.blocks.streams.io.Writer$SingleWriter@11dd645a
|
|
611
611
|
w.write(42)
|
|
612
612
|
// res39: Boolean = true
|
|
613
613
|
w.fail(new RuntimeException("Error"))
|
|
@@ -630,11 +630,11 @@ val numberWriter = new Writer[Number] {
|
|
|
630
630
|
def write(a: Number) = { println(s"Number: $a"); true }
|
|
631
631
|
def close() = ()
|
|
632
632
|
}
|
|
633
|
-
// numberWriter: Writer[Number] = repl.MdocSession$MdocApp42$$anon$59@
|
|
633
|
+
// numberWriter: Writer[Number] = repl.MdocSession$MdocApp42$$anon$59@4a564d3b
|
|
634
634
|
|
|
635
635
|
// numberWriter is also a Writer[IntNum] due to contravariance
|
|
636
636
|
val intNumWriter: Writer[IntNum] = numberWriter
|
|
637
|
-
// intNumWriter: Writer[IntNum] = repl.MdocSession$MdocApp42$$anon$59@
|
|
637
|
+
// intNumWriter: Writer[IntNum] = repl.MdocSession$MdocApp42$$anon$59@4a564d3b
|
|
638
638
|
intNumWriter.write(IntNum(42))
|
|
639
639
|
// Number: IntNum(42)
|
|
640
640
|
// res43: Boolean = true
|
|
@@ -43,16 +43,16 @@ Modern services produce three distinct kinds of observability data. Traces captu
|
|
|
43
43
|
|
|
44
44
|
```scala
|
|
45
45
|
// Core: logging, tracing, metrics
|
|
46
|
-
libraryDependencies += "dev.zio" %% "zio-blocks-telemetry" % "0.0.
|
|
46
|
+
libraryDependencies += "dev.zio" %% "zio-blocks-telemetry" % "0.0.56"
|
|
47
47
|
|
|
48
48
|
// Optional: OTLP JSON export over HTTP (JVM only)
|
|
49
|
-
libraryDependencies += "dev.zio" %% "zio-blocks-telemetry-otel" % "0.0.
|
|
49
|
+
libraryDependencies += "dev.zio" %% "zio-blocks-telemetry-otel" % "0.0.56"
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
For Scala.js (telemetry core only):
|
|
53
53
|
|
|
54
54
|
```scala
|
|
55
|
-
libraryDependencies += "dev.zio" %%% "zio-blocks-telemetry" % "0.0.
|
|
55
|
+
libraryDependencies += "dev.zio" %%% "zio-blocks-telemetry" % "0.0.56"
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
Supports Scala 2.13.x and 3.x.
|
|
@@ -18,7 +18,7 @@ It also carries trace context *between* processes. A trace that stops at your se
|
|
|
18
18
|
Add the module to your build file:
|
|
19
19
|
|
|
20
20
|
```scala
|
|
21
|
-
libraryDependencies += "dev.zio" %% "zio-blocks-telemetry-otel" % "0.0.
|
|
21
|
+
libraryDependencies += "dev.zio" %% "zio-blocks-telemetry-otel" % "0.0.56"
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
## Configuring the Endpoint and Batching
|