Hi, I found that the library behavior is different on scala 3 and scala 2: scala 3 ignores the specified preferredPrefix while in scala 2 it is used.
Code:
//> using dep dev.valentiay::phobos-core:0.26.0
//> using scala "2.13.16"
import phobos.Namespace
import phobos.derivation.semiauto.deriveElementEncoder
import phobos.encoding.{ElementEncoder, XmlEncoder}
import phobos.syntax.xmlns
object MyNamespace {
type ns = MyNamespace.type
implicit val ns: Namespace[ns] = Namespace.mkInstance[ns]("http://test.org/some", Some("my"))
}
final case class Foo(
xmlns(MyNamespace) foo: String
)
object Foo {
implicit val encoder: ElementEncoder[Foo] = deriveElementEncoder
implicit def xmlEncoder: XmlEncoder[Foo] =
XmlEncoder.fromElementEncoder[Foo]("MyRoot")
}
object Main extends App {
println(XmlEncoder[Foo].encode(Foo("bar")))
}
Output for Scala 2.13.16:
<?xml version='1.0' encoding='UTF-8'?><MyRoot><my:foo xmlns:my="http://test.org/some">bar</my:foo></MyRoot>
Output for Scala 3.3.6:
<?xml version='1.0' encoding='UTF-8'?><MyRoot><ans1:foo xmlns:ans1="http://test.org/some">bar</ans1:foo></MyRoot>
Scala 3 generates random names for namespace while Scala 2 uses a preferredPrefix