Skip to content

Conversation

Michaelt293
Copy link

@Michaelt293 Michaelt293 commented Apr 26, 2018

I am currently using moultingyaml and have ran into the issue of duplicate keys being dropped (see #12 ). The fix mentioned in the issue has been merged into snakeyaml but the change was not merged into moultingyaml.

@rbuckland has made a fix on his fork -
https://github.com/rbuckland/moultingyaml/blob/master/src/main/scala/net/jcazevedo/moultingyaml/package.scala

In this pull request, I have gone for a simpler option where I have simply set the parser to fail on duplicate keys. I can't think of a situation where you wouldn't want to fail on duplicate keys. Having said that, I think it it would be better to allow users to configure the behaviour they want.

Edit: I have come up with a solution that maintains backwards compatibility but gives users the ability to customise the parsing behaviour -

  implicit class PimpedString(val string: String) extends AnyVal {
    private def loaderOptions(allowDuplicateKeys: Boolean) = {
      val loader = new LoaderOptions
      loader.setAllowDuplicateKeys(allowDuplicateKeys)
      loader
    }

    def parseYaml: YamlValue =
      convertToYamlValue(new Yaml().load(string))

    def parseYamls: Seq[YamlValue] =
      new Yaml().loadAll(string).asScala.map(convertToYamlValue).toSeq

    def parseYaml(allowDuplicateKeys: Boolean): YamlValue =
      convertToYamlValue(new Yaml(loaderOptions(allowDuplicateKeys)).load(string))

    def parseYamls(allowDuplicateKeys: Boolean): Seq[YamlValue] =
      new Yaml(loaderOptions(allowDuplicateKeys)).loadAll(string).asScala.map(convertToYamlValue).toSeq
  }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant