Skip to content
This repository has been archived by the owner on May 21, 2018. It is now read-only.

XML: extraction from nested structures with customized behavior #267

Open
juanjovazquez opened this issue Mar 13, 2017 · 1 comment
Open

Comments

@juanjovazquez
Copy link

Xml module is not able to dispatch a valid Extractor from nested structures when the extraction of some middle elements has been customized. The behavior has been observed starting from nested structures greater than three elements. See the next code snippet as an example of this issue:

object RaptureXmlOk {
  import rapture.xml._

  case class Foo(bar: Bar)
  case class Bar(baz: Baz)
  case class Baz(qux: Qux)
  case class Qux(value: String)

  implicitly[Extractor[Bar, Xml]] // works
  implicitly[Extractor[Foo, Xml]] // works
}

// REPL
// :paste
// Entering paste mode (ctrl-D to finish)
// CTRL +D
// Exiting paste mode, now interpreting.
// defined object RaptureXmlOk

object RaptureXmlKo {
  import rapture.xml._, xmlBackends.stdlib._

  case class Foo(bar: Bar)
  case class Bar(baz: Baz)
  case class Baz(qux: Qux)
  object Baz {
    // custom extractor in order to be able to extract this:
    // xml"""<foo><bar><baz><value>xxx</value></baz></bar></foo>""".as[Foo]
    // i.e. without the extra <qux>...</qux>
    implicit val bazExtractor: Extractor[Baz, Xml] =
      Xml.extractor[Qux].map(Baz(_))
  }
  case class Qux(value: String)

  implicitly[Extractor[Bar, Xml]] // works
  implicitly[Extractor[Foo, Xml]] // fails!!!
}

// REPL
// :paste
// Entering paste mode (ctrl-D to finish)
// CTRL +D
// Exiting paste mode, now interpreting.
// <console>:27: error: cannot extract type RaptureXmlKo.Foo from rapture.xml.Xml.
//  implicitly[Extractor[Foo, Xml]] // fails!!!
@propensive
Copy link
Owner

Thanks for the report, @juanjovazquez! We've shifted development to a complete rewrite called Xylophone which avoids several of the fundamental problems with Rapture XML, though we haven't yet got the generic serialization and extraction done. However, I think this is a known problem, which is fixed in the latest source, and will certainly be fixed in Xylophone when it's ready. (Hopefully quite soon!)

I'll leave this open for now as a reminder to check it in Xylophone.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants