@zio.dev/zio-blocks 0.0.32 → 0.0.51
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/compile-time-resource-safety-with-scope.md +16 -17
- package/guides/getting-started-with-mux.md +1507 -0
- package/guides/query-dsl-extending.md +161 -102
- package/guides/query-dsl-fluent-builder.md +217 -157
- package/guides/query-dsl-reified-optics.md +12 -10
- package/guides/query-dsl-sql.md +246 -165
- package/guides/telemetry-guide.md +1069 -0
- package/guides/zio-schema-migration.md +29 -22
- package/index.md +293 -51
- package/package.json +1 -1
- package/plans/config-follow-up-prs.md +188 -0
- package/plans/config-pr-assessment-roadmap.md +310 -0
- package/reference/MuxDataFlow.jsx +250 -0
- package/reference/async.md +651 -0
- package/reference/chunk.md +3533 -308
- package/reference/codegen/case-class.md +436 -0
- package/reference/codegen/emitter-config.md +383 -0
- package/reference/codegen/examples.md +664 -0
- package/reference/codegen/field.md +316 -0
- package/reference/codegen/index.md +317 -0
- package/reference/codegen/scala-emitter.md +392 -0
- package/reference/codegen/scala-file.md +276 -0
- package/reference/codegen/sealed-trait.md +408 -0
- package/reference/codegen/type-definition.md +340 -0
- package/reference/codegen/type-ref.md +201 -0
- package/reference/combinators.md +347 -117
- package/reference/config.md +158 -0
- package/reference/context.md +4 -4
- package/reference/datastar.md +346 -0
- package/reference/docs.md +1461 -345
- package/reference/endpoint/auth-type.md +146 -0
- package/reference/endpoint/endpoint.md +297 -0
- package/reference/endpoint/http-codec.md +249 -0
- package/reference/endpoint/index.md +825 -0
- package/reference/endpoint/path-codec.md +237 -0
- package/reference/endpoint/route-pattern.md +196 -0
- package/reference/endpoint/route-tree.md +111 -0
- package/reference/endpoint/segment-codec.md +212 -0
- package/reference/html.md +1120 -0
- package/reference/htmx/attribute-values.md +359 -0
- package/reference/htmx/hx-encoding.md +111 -0
- package/reference/htmx/hx-params.md +204 -0
- package/reference/htmx/hx-swap.md +276 -0
- package/reference/htmx/hx-sync.md +251 -0
- package/reference/htmx/hx-target.md +314 -0
- package/reference/htmx/hx-trigger.md +457 -0
- package/reference/htmx/hx-url-update.md +239 -0
- package/reference/htmx/index.md +855 -0
- package/reference/http-model/index.md +47 -0
- package/reference/http-model/model.md +1481 -0
- package/reference/http-model/schema.md +747 -0
- package/reference/maybe.md +826 -0
- package/reference/media-type.md +2 -2
- package/reference/mux.mdx +823 -0
- package/reference/openapi.md +1351 -0
- package/reference/resource-management/defer-handle.md +1 -1
- package/reference/resource-management/resource.md +31 -2
- package/reference/resource-management/scope.md +28 -12
- package/reference/resource-management/wire.md +3 -7
- package/reference/ringbuffer/MpmcDiagram.jsx +717 -0
- package/reference/ringbuffer/MpscDiagram.jsx +618 -0
- package/reference/ringbuffer/SpmcDiagram.jsx +680 -0
- package/reference/ringbuffer/SpscDiagram.jsx +677 -0
- package/reference/ringbuffer/advanced.mdx +109 -0
- package/reference/ringbuffer/index.mdx +145 -0
- package/reference/ringbuffer/mpmc.mdx +151 -0
- package/reference/ringbuffer/mpsc.mdx +132 -0
- package/reference/ringbuffer/spmc.mdx +108 -0
- package/reference/ringbuffer/spsc.mdx +344 -0
- package/reference/{allows.md → schema/allows.md} +4 -4
- package/reference/{binding-resolver.md → schema/binding-resolver.md} +1 -1
- package/reference/{binding.md → schema/binding.md} +2 -3
- package/reference/schema/built-in-codecs/avro.md +451 -0
- package/reference/schema/built-in-codecs/bson.md +480 -0
- package/reference/schema/built-in-codecs/csv.md +564 -0
- package/reference/schema/built-in-codecs/index.md +77 -0
- package/reference/schema/built-in-codecs/json/index.md +295 -0
- package/reference/schema/built-in-codecs/json/json-config.md +217 -0
- package/reference/{json-patch.md → schema/built-in-codecs/json/json-patch.md} +3 -3
- package/reference/{json-schema.md → schema/built-in-codecs/json/json-schema.md} +14 -47
- package/reference/schema/built-in-codecs/json/json-selection.md +322 -0
- package/reference/{json.md → schema/built-in-codecs/json/json.md} +32 -64
- package/reference/schema/built-in-codecs/messagepack.md +508 -0
- package/reference/schema/built-in-codecs/thrift.md +433 -0
- package/reference/schema/built-in-codecs/toon.md +1078 -0
- package/reference/{xml.md → schema/built-in-codecs/xml.md} +34 -192
- package/reference/schema/built-in-codecs/yaml.md +552 -0
- package/reference/{codec.md → schema/codec.md} +10 -10
- package/reference/{dynamic-optic.md → schema/dynamic-optic.md} +151 -5
- package/reference/{dynamic-schema.md → schema/dynamic-schema.md} +8 -8
- package/reference/schema/format.md +92 -0
- package/reference/schema/index.md +50 -0
- package/reference/schema/migration.md +297 -0
- package/reference/{modifier.md → schema/modifier.md} +58 -7
- package/reference/{optics.md → schema/optics.md} +2 -2
- package/reference/{patch.md → schema/patch.md} +1 -1
- package/{path-interpolator.md → reference/schema/path-interpolator.md} +165 -72
- package/reference/{schema-evolution → schema/schema-evolution}/as.md +5 -5
- package/reference/{schema-evolution → schema/schema-evolution}/index.md +2 -2
- package/reference/{schema-evolution → schema/schema-evolution}/into.md +3 -3
- package/reference/{schema-expr.md → schema/schema-expr.md} +110 -175
- package/reference/{schema.md → schema/schema.md} +13 -1
- package/reference/{structural-types.md → schema/structural-types.md} +1 -1
- package/reference/{type-class-derivation.md → schema/type-class-derivation.md} +63 -1
- package/reference/smithy.md +533 -0
- package/reference/sql/db-codec-deriver.md +71 -0
- package/reference/sql/db-codec.md +687 -0
- package/reference/sql/db-con.md +271 -0
- package/reference/sql/db-connection.md +153 -0
- package/reference/sql/db-param-writer.md +77 -0
- package/reference/sql/db-param.md +66 -0
- package/reference/sql/db-result-reader.md +146 -0
- package/reference/sql/db-tx.md +82 -0
- package/reference/sql/db-value.md +41 -0
- package/reference/sql/ddl.md +85 -0
- package/reference/sql/frag.md +254 -0
- package/reference/sql/index.md +341 -0
- package/reference/sql/repo.md +600 -0
- package/reference/sql/sql-dialect.md +73 -0
- package/reference/sql/sql-logger.md +62 -0
- package/reference/sql/sql-name-mapper.md +70 -0
- package/reference/sql/table-metadata.md +134 -0
- package/reference/sql/table.md +448 -0
- package/reference/sql/transactor-zio.md +399 -0
- package/reference/sql/transactor.md +353 -0
- package/reference/sql-zio.md +112 -0
- package/reference/streams/concurrent-operators.md +106 -0
- package/reference/streams/index.md +653 -0
- package/reference/streams/pipeline.md +718 -0
- package/reference/streams/reader.md +1284 -0
- package/reference/streams/scala-2-compatibility.md +55 -0
- package/reference/streams/sink.md +1426 -0
- package/reference/streams/stream.md +2526 -0
- package/reference/streams/writer.md +1045 -0
- package/reference/streams/zero-boxing.md +275 -0
- package/reference/telemetry.md +693 -0
- package/reference/typeid.md +2922 -583
- package/sidebars.js +238 -43
- package/superpowers/plans/2026-03-19-docs-critique-subagent.md +407 -0
- package/superpowers/specs/2026-03-19-docs-critique-subagent-design.md +222 -0
- package/reference/formats.md +0 -694
- package/reference/http-model.md +0 -1716
- package/reference/streams.md +0 -989
- package/ringbuffer.md +0 -249
- /package/reference/{json-differ.md → schema/built-in-codecs/json/json-differ.md} +0 -0
- /package/reference/{dynamic-value.md → schema/dynamic-value.md} +0 -0
- /package/reference/{lazy.md → schema/lazy.md} +0 -0
- /package/reference/{reflect.md → schema/reflect.md} +0 -0
- /package/reference/{registers.md → schema/registers.md} +0 -0
- /package/reference/{schema-error.md → schema/schema-error.md} +0 -0
- /package/reference/{syntax.md → schema/syntax.md} +0 -0
- /package/reference/{validation.md → schema/validation.md} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: xml
|
|
3
|
-
title: "XML"
|
|
3
|
+
title: "XML Codec Module"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
`Xml` is a **sealed trait representing XML nodes**. It provides a type-safe, immutable representation of all valid XML document structures including elements, text nodes, CDATA sections, comments, and processing instructions.
|
|
@@ -303,7 +303,7 @@ Use `WriterConfig` to control XML output formatting:
|
|
|
303
303
|
import zio.blocks.schema.xml.WriterConfig
|
|
304
304
|
|
|
305
305
|
// Compact output (default)
|
|
306
|
-
val compact = WriterConfig
|
|
306
|
+
val compact = WriterConfig
|
|
307
307
|
// <Person><name>Alice</name></Person>
|
|
308
308
|
|
|
309
309
|
// Pretty-printed with 2-space indentation
|
|
@@ -466,7 +466,7 @@ val xml = XmlReader.read("""
|
|
|
466
466
|
</book>
|
|
467
467
|
</books>
|
|
468
468
|
</library>
|
|
469
|
-
""")
|
|
469
|
+
""")
|
|
470
470
|
|
|
471
471
|
// Navigate to child elements
|
|
472
472
|
val books = xml.select.get("library").get("books")
|
|
@@ -478,9 +478,16 @@ val firstBook = books.get("book")(0)
|
|
|
478
478
|
Extract text content from the first book:
|
|
479
479
|
|
|
480
480
|
```scala
|
|
481
|
-
val title: Either[
|
|
482
|
-
// title: Either[
|
|
483
|
-
//
|
|
481
|
+
val title: Either[SchemaError, String] = firstBook.get("title").text
|
|
482
|
+
// title: Either[SchemaError, String] = Left(
|
|
483
|
+
// SchemaError(
|
|
484
|
+
// List(
|
|
485
|
+
// Message(
|
|
486
|
+
// source = DynamicOptic(IndexedSeq()),
|
|
487
|
+
// details = "Expected single value but got 0"
|
|
488
|
+
// )
|
|
489
|
+
// )
|
|
490
|
+
// )
|
|
484
491
|
// )
|
|
485
492
|
```
|
|
486
493
|
|
|
@@ -513,7 +520,8 @@ Filter selections by node type or custom predicates:
|
|
|
513
520
|
```scala
|
|
514
521
|
import zio.blocks.schema.xml._
|
|
515
522
|
|
|
516
|
-
val
|
|
523
|
+
val xml = XmlReader.read("<root><item>text1</item><comment>note</comment></root>")
|
|
524
|
+
val selection = xml.select.descendant("item")
|
|
517
525
|
|
|
518
526
|
// Filter by type
|
|
519
527
|
val elements = selection.elements
|
|
@@ -531,22 +539,23 @@ Execute a selection to extract values or convert to other formats:
|
|
|
531
539
|
```scala
|
|
532
540
|
import zio.blocks.schema.xml._
|
|
533
541
|
|
|
534
|
-
val
|
|
542
|
+
val xml = XmlReader.read("<root><item>A</item><item>B</item></root>")
|
|
543
|
+
val selection = xml.select.get("item")
|
|
535
544
|
|
|
536
545
|
// Get single value (fails if not exactly one)
|
|
537
|
-
val one: Either[
|
|
546
|
+
val one: Either[SchemaError, Xml] = selection.one
|
|
538
547
|
|
|
539
548
|
// Get any value (first of many)
|
|
540
|
-
val any: Either[
|
|
549
|
+
val any: Either[SchemaError, Xml] = selection.any
|
|
541
550
|
|
|
542
551
|
// Get all values as a single XML element
|
|
543
|
-
val all: Either[
|
|
552
|
+
val all: Either[SchemaError, Xml] = selection.all
|
|
544
553
|
|
|
545
554
|
// Convert to chunk
|
|
546
555
|
val chunk = selection.toChunk
|
|
547
556
|
|
|
548
557
|
// Extract text content
|
|
549
|
-
val text: Either[
|
|
558
|
+
val text: Either[SchemaError, String] = selection.text
|
|
550
559
|
val allText: String = selection.textContent
|
|
551
560
|
```
|
|
552
561
|
|
|
@@ -557,8 +566,10 @@ Combine and transform selections using monadic operations:
|
|
|
557
566
|
```scala
|
|
558
567
|
import zio.blocks.schema.xml._
|
|
559
568
|
|
|
560
|
-
val
|
|
561
|
-
val
|
|
569
|
+
val xml1 = XmlReader.read("<root><item>X</item></root>")
|
|
570
|
+
val xml2 = XmlReader.read("<root><item>Y</item></root>")
|
|
571
|
+
val selection1 = xml1.select.get("item")
|
|
572
|
+
val selection2 = xml2.select.get("item")
|
|
562
573
|
|
|
563
574
|
// Map over selections
|
|
564
575
|
val mapped = selection1.map(xml => xml)
|
|
@@ -631,11 +642,11 @@ Apply a patch to an XML document to produce a modified result:
|
|
|
631
642
|
import zio.blocks.schema._
|
|
632
643
|
import zio.blocks.schema.xml._
|
|
633
644
|
|
|
634
|
-
val xml
|
|
645
|
+
val xml = XmlReader.read("<person><name>Alice</name></person>")
|
|
635
646
|
val patch = XmlPatch.setAttribute(p".person", "active", "true")
|
|
636
647
|
|
|
637
648
|
// Apply the patch
|
|
638
|
-
val result: Either[
|
|
649
|
+
val result: Either[SchemaError, Xml] = patch(xml)
|
|
639
650
|
```
|
|
640
651
|
|
|
641
652
|
### Composing Patches
|
|
@@ -657,175 +668,6 @@ val patch2 = XmlPatch.add(
|
|
|
657
668
|
val combined = patch1 ++ patch2
|
|
658
669
|
```
|
|
659
670
|
|
|
660
|
-
## XmlEncoder and XmlDecoder
|
|
661
|
-
|
|
662
|
-
For more fine-grained control over XML serialization, use the separate `XmlEncoder` and `XmlDecoder` traits:
|
|
663
|
-
|
|
664
|
-
### XmlEncoder
|
|
665
|
-
|
|
666
|
-
`XmlEncoder[A]` provides type-safe XML encoding:
|
|
667
|
-
|
|
668
|
-
```scala
|
|
669
|
-
import zio.blocks.schema._
|
|
670
|
-
import zio.blocks.schema.xml._
|
|
671
|
-
|
|
672
|
-
// Automatic derivation from Schema
|
|
673
|
-
case class Person(name: String, age: Int)
|
|
674
|
-
object Person {
|
|
675
|
-
implicit val schema: Schema[Person] = Schema.derived
|
|
676
|
-
implicit val encoder: XmlEncoder[Person] = XmlEncoder.fromSchema
|
|
677
|
-
}
|
|
678
|
-
|
|
679
|
-
val person = Person("Alice", 30)
|
|
680
|
-
val xml: Xml = XmlEncoder[Person].encode(person)
|
|
681
|
-
```
|
|
682
|
-
|
|
683
|
-
#### Creating custom encoders
|
|
684
|
-
|
|
685
|
-
Create custom encoders from functions or using contravariance:
|
|
686
|
-
|
|
687
|
-
```scala
|
|
688
|
-
import zio.blocks.schema.xml._
|
|
689
|
-
|
|
690
|
-
// Create from a function
|
|
691
|
-
val customEncoder: XmlEncoder[Int] = XmlEncoder.instance(n =>
|
|
692
|
-
Xml.Element("number", Xml.Text(n.toString))
|
|
693
|
-
)
|
|
694
|
-
|
|
695
|
-
// Map with contravariance - encode a wrapper type
|
|
696
|
-
case class UserId(value: Int)
|
|
697
|
-
|
|
698
|
-
val userIdEncoder: XmlEncoder[UserId] =
|
|
699
|
-
customEncoder.contramap[UserId](_.value)
|
|
700
|
-
```
|
|
701
|
-
|
|
702
|
-
#### Using implicit resolution
|
|
703
|
-
|
|
704
|
-
Leverage implicit resolution for automatic encoder derivation:
|
|
705
|
-
|
|
706
|
-
```scala
|
|
707
|
-
import zio.blocks.schema._
|
|
708
|
-
import zio.blocks.schema.xml._
|
|
709
|
-
|
|
710
|
-
case class Product(id: String, price: Double)
|
|
711
|
-
object Product {
|
|
712
|
-
implicit val schema: Schema[Product] = Schema.derived
|
|
713
|
-
}
|
|
714
|
-
|
|
715
|
-
// No explicit encoder needed - derives automatically
|
|
716
|
-
def encodeProduct[A](value: A)(implicit encoder: XmlEncoder[A]): Xml =
|
|
717
|
-
encoder.encode(value)
|
|
718
|
-
|
|
719
|
-
val result = encodeProduct(Product("item-1", 99.99))
|
|
720
|
-
```
|
|
721
|
-
|
|
722
|
-
### XmlDecoder
|
|
723
|
-
|
|
724
|
-
`XmlDecoder[A]` provides type-safe XML decoding with error handling:
|
|
725
|
-
|
|
726
|
-
```scala
|
|
727
|
-
import zio.blocks.schema._
|
|
728
|
-
import zio.blocks.schema.xml._
|
|
729
|
-
|
|
730
|
-
// Automatic derivation from Schema
|
|
731
|
-
case class Person(name: String, age: Int)
|
|
732
|
-
object Person {
|
|
733
|
-
implicit val schema: Schema[Person] = Schema.derived
|
|
734
|
-
implicit val decoder: XmlDecoder[Person] = XmlDecoder.fromSchema
|
|
735
|
-
}
|
|
736
|
-
|
|
737
|
-
val xml = Xml.Element("Person",
|
|
738
|
-
Xml.Element("name", Xml.Text("Alice")),
|
|
739
|
-
Xml.Element("age", Xml.Text("30"))
|
|
740
|
-
)
|
|
741
|
-
```
|
|
742
|
-
|
|
743
|
-
Decode the XML:
|
|
744
|
-
|
|
745
|
-
```scala
|
|
746
|
-
val result: Either[XmlError, Person] = XmlDecoder[Person].decode(xml)
|
|
747
|
-
// result: Either[XmlError, Person] = Right(Person(name = "Alice", age = 30))
|
|
748
|
-
```
|
|
749
|
-
|
|
750
|
-
#### Creating custom decoders
|
|
751
|
-
|
|
752
|
-
Create custom decoders from functions or using covariance:
|
|
753
|
-
|
|
754
|
-
```scala
|
|
755
|
-
import zio.blocks.schema.xml._
|
|
756
|
-
import zio.blocks.chunk.Chunk
|
|
757
|
-
|
|
758
|
-
// Create from a function
|
|
759
|
-
val numberDecoder: XmlDecoder[Int] = XmlDecoder.instance { xml =>
|
|
760
|
-
xml match {
|
|
761
|
-
case Xml.Element(_, _, Chunk(Xml.Text(text), _*)) =>
|
|
762
|
-
text.toIntOption.toRight(XmlError("Invalid number"))
|
|
763
|
-
case _ => Left(XmlError("Expected number element"))
|
|
764
|
-
}
|
|
765
|
-
}
|
|
766
|
-
|
|
767
|
-
// Map for covariance - decode to a wrapper type
|
|
768
|
-
case class UserId(value: Int)
|
|
769
|
-
|
|
770
|
-
val userIdDecoder: XmlDecoder[UserId] =
|
|
771
|
-
numberDecoder.map(UserId(_))
|
|
772
|
-
```
|
|
773
|
-
|
|
774
|
-
#### Error handling with decoders
|
|
775
|
-
|
|
776
|
-
Handle decoding errors gracefully with fallback strategies:
|
|
777
|
-
|
|
778
|
-
```scala
|
|
779
|
-
import zio.blocks.schema._
|
|
780
|
-
import zio.blocks.schema.xml._
|
|
781
|
-
|
|
782
|
-
case class Person(name: String, age: Int)
|
|
783
|
-
object Person {
|
|
784
|
-
implicit val schema: Schema[Person] = Schema.derived
|
|
785
|
-
}
|
|
786
|
-
|
|
787
|
-
def decodeWithFallback[A](
|
|
788
|
-
xml: Xml,
|
|
789
|
-
fallback: A
|
|
790
|
-
)(implicit decoder: XmlDecoder[A]): A = {
|
|
791
|
-
decoder.decode(xml).getOrElse(fallback)
|
|
792
|
-
}
|
|
793
|
-
|
|
794
|
-
val invalidXml = Xml.Element("Empty")
|
|
795
|
-
val defaultPerson = Person("Unknown", 0)
|
|
796
|
-
val result = decodeWithFallback(invalidXml, defaultPerson)
|
|
797
|
-
// Person("Unknown", 0)
|
|
798
|
-
```
|
|
799
|
-
|
|
800
|
-
#### Combining encoders and decoders
|
|
801
|
-
|
|
802
|
-
Round-trip values by encoding and decoding:
|
|
803
|
-
|
|
804
|
-
```scala
|
|
805
|
-
import zio.blocks.schema._
|
|
806
|
-
import zio.blocks.schema.xml._
|
|
807
|
-
import zio.blocks.schema.xml.syntax._
|
|
808
|
-
|
|
809
|
-
case class Message(id: String, text: String)
|
|
810
|
-
object Message {
|
|
811
|
-
implicit val schema: Schema[Message] = Schema.derived
|
|
812
|
-
}
|
|
813
|
-
|
|
814
|
-
// Round-trip: encode then decode
|
|
815
|
-
val message = Message("msg-1", "Hello")
|
|
816
|
-
val encoded: Xml = message.toXml
|
|
817
|
-
```
|
|
818
|
-
|
|
819
|
-
Decode the encoded value:
|
|
820
|
-
|
|
821
|
-
```scala
|
|
822
|
-
val result: Either[XmlError, Message] =
|
|
823
|
-
implicitly[XmlDecoder[Message]].decode(encoded)
|
|
824
|
-
// result: Either[XmlError, Message] = Right(
|
|
825
|
-
// Message(id = "msg-1", text = "Hello")
|
|
826
|
-
// )
|
|
827
|
-
```
|
|
828
|
-
|
|
829
671
|
## Extension Syntax
|
|
830
672
|
|
|
831
673
|
When a `Schema` is in scope, use convenient extension methods:
|
|
@@ -955,15 +797,15 @@ object Person {
|
|
|
955
797
|
implicit val schema: Schema[Person] = Schema.derived
|
|
956
798
|
}
|
|
957
799
|
|
|
958
|
-
// Get the underlying
|
|
959
|
-
val codec: XmlCodec[Person] = Schema[Person].derive(
|
|
800
|
+
// Get the underlying XML codec
|
|
801
|
+
val codec: XmlCodec[Person] = Schema[Person].derive(XmlFormat)
|
|
960
802
|
|
|
961
803
|
// Encode to Xml directly
|
|
962
804
|
val person = Person("Alice", 30)
|
|
963
805
|
val xml: Xml = codec.encodeValue(person)
|
|
964
806
|
|
|
965
807
|
// Decode from Xml directly
|
|
966
|
-
val decoded:
|
|
808
|
+
val decoded: Person = codec.decodeValue(xml)
|
|
967
809
|
```
|
|
968
810
|
|
|
969
811
|
**XmlCodec supports all Schema types:**
|
|
@@ -977,7 +819,7 @@ val decoded: Either[XmlError, Person] = codec.decodeValue(xml)
|
|
|
977
819
|
|
|
978
820
|
## Error Handling
|
|
979
821
|
|
|
980
|
-
All decoding operations return `Either[SchemaError, A]` or `Either[
|
|
822
|
+
All decoding operations return `Either[SchemaError, A]` or `Either[SchemaError, A]`. The `SchemaError` type provides detailed error information:
|
|
981
823
|
|
|
982
824
|
```scala
|
|
983
825
|
import zio.blocks.schema._
|
|
@@ -1002,12 +844,12 @@ result match {
|
|
|
1002
844
|
}
|
|
1003
845
|
```
|
|
1004
846
|
|
|
1005
|
-
`
|
|
847
|
+
`SchemaError` provides detailed error information for debugging:
|
|
1006
848
|
|
|
1007
849
|
```scala
|
|
1008
850
|
import zio.blocks.schema.xml._
|
|
1009
851
|
|
|
1010
|
-
val error =
|
|
852
|
+
val error = SchemaError("Parse failed")
|
|
1011
853
|
|
|
1012
854
|
// Error message
|
|
1013
855
|
val message: String = error.getMessage
|
|
@@ -1133,7 +975,7 @@ val xmlString = """
|
|
|
1133
975
|
</library>
|
|
1134
976
|
"""
|
|
1135
977
|
|
|
1136
|
-
val xml = XmlReader.read(xmlString)
|
|
978
|
+
val xml = XmlReader.read(xmlString)
|
|
1137
979
|
|
|
1138
980
|
// Find all books
|
|
1139
981
|
val books = xml.select.get("library").get("books").get("book")
|