lancepantz / clj-yaml

YAML encoding and decoding for Clojure via SnakeYAML
Other
91 stars 52 forks source link

Suggest owainlewis/yaml as alternative? #28

Open rymndhng opened 6 years ago

rymndhng commented 6 years ago

It looks like this library isn't actively maintained anymore. I'd suggest looking at https://github.com/owainlewis/yaml as an alternative.

borkdude commented 4 years ago

@rymndhng This library seems to be actively maintained here: https://github.com/clj-commons/clj-yaml I'd be interested to hear what the differences between owainlewis/yaml and clj-yaml are.

rymndhng commented 4 years ago

Hey @borkdude. It's been a while since I've needed to work with yaml in clojure. It looks like both libraries are built on top of the Java Library snakeyaml. Furthermore, both attempt to convert YAML into Clojure Data Structure (yay)!

One useful feature of owainlewis/yaml is the ability to ignore unknown YAML tags using the passthrough-constructor. I've had to use this in the past to parse yaml generated by other tools/languages. Arguably, this feature should be easy to port to clj-commons/yaml ;)

Example:

With clj-commons/clj-yaml

❯ clj -Sdeps '{:deps {clj-commons/clj-yaml {:mvn/version "0.7.0"}}}'
user=> (require '[clj-yaml.core :as yaml])
user=> (yaml/parse-string "--- !foobar
 foo: HELLO WORLD")
Execution error (ConstructorException) at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructUndefined/construct (SafeConstructor.java:539).
could not determine a constructor for the tag !foobar
 in 'string', line 1, column 5:
    --- !foobar
        ^

With owainlewis/yaml using :passthrough-constructor

❯ clj -Sdeps '{:deps {io.forward/yaml {:mvn/version "1.0.10"}}}'
user=> (require '[yaml.core :as yaml])
user=> (yaml/parse-string "--- !foobar
  foo: HELLO WORLD" :constructor yaml.reader/passthrough-constructor)
#ordered/map ([:foo "HELLO WORLD"])
borkdude commented 4 years ago

Thanks for the information!