package yaml

  1. Overview
  2. Docs

A library for parsing and emitting YAML.

It is based on a binding to libyaml which covers the generation and parsing processes.

Most simple use cases can simply use the of_string and to_string functions, which are compatible with the Ezjsonm types. This means that you can convert between JSON and Yaml format easily.

If you use more advanced Yaml features such as aliases or anchors, then the yaml type and yaml_of_string and yaml_to_string functions will be more useful. The library does not yet support expanding aliases into the JSON format from YAML, so that will currently result in an error.

Types

type value = [
  1. | `Null
  2. | `Bool of bool
  3. | `Float of float
  4. | `String of string
  5. | `A of value list
  6. | `O of (string * value) list
]

value is the subset of a Yaml document that is compatible with JSON. This type is the same as Ezjsonm.value, and so most simple uses of Yaml can be interchanged with JSON.

include sig ... end
val value_of_sexp : Sexplib.Sexp.t -> value
val __value_of_sexp__ : Sexplib.Sexp.t -> value
val sexp_of_value : value -> Sexplib.Sexp.t
type yaml = [
  1. | `String of anchor_string
  2. | `Alias of string
  3. | `A of yaml list
  4. | `O of (anchor_string * yaml) list
]

yaml is the representation of a Yaml document that preserves alias information and other Yaml-specific metadata that cannot be represented in JSON. It is not recommended to convert untrusted Yaml with aliases into JSON due to the risk of denial-of-service via a Billion Laughs attack.

and anchor_string = {
  1. anchor : string option;
  2. value : string;
}

yaml is the representation of a Yaml document that preserves alias information and other Yaml-specific metadata that cannot be represented in JSON. It is not recommended to convert untrusted Yaml with aliases into JSON due to the risk of denial-of-service via a Billion Laughs attack.

anchor_string holds a possible Yaml anchor, and the string value

include sig ... end
val yaml_of_sexp : Sexplib.Sexp.t -> yaml
val __yaml_of_sexp__ : Sexplib.Sexp.t -> yaml
val anchor_string_of_sexp : Sexplib.Sexp.t -> anchor_string
val sexp_of_yaml : yaml -> Sexplib.Sexp.t
val sexp_of_anchor_string : anchor_string -> Sexplib.Sexp.t
type version = [
  1. | `V1_0
  2. | `V1_1
]

Version of the YAML spec of a document. Refer to the Yaml specification for details of the differences between versions.

include sig ... end
val version_of_sexp : Sexplib.Sexp.t -> version
val __version_of_sexp__ : Sexplib.Sexp.t -> version
val sexp_of_version : version -> Sexplib.Sexp.t
type encoding = [
  1. | `Any
  2. | `Utf16be
  3. | `Utf16le
  4. | `Utf8
]

Document encoding. The recommended format is Utf8.

include sig ... end
val encoding_of_sexp : Sexplib.Sexp.t -> encoding
val __encoding_of_sexp__ : Sexplib.Sexp.t -> encoding
val sexp_of_encoding : encoding -> Sexplib.Sexp.t
type scalar_style = [
  1. | `Any
  2. | `Plain
  3. | `Single_quoted
  4. | `Double_quoted
  5. | `Literal
  6. | `Folded
]

YAML provides three flow scalar styles: double-quoted, single-quoted and plain (unquoted). Each provides a different trade-off between readability and expressive power. The Yaml spec section 7.3 has more details.

include sig ... end
val scalar_style_of_sexp : Sexplib.Sexp.t -> scalar_style
val __scalar_style_of_sexp__ : Sexplib.Sexp.t -> scalar_style
val sexp_of_scalar_style : scalar_style -> Sexplib.Sexp.t
type layout_style = [
  1. | `Any
  2. | `Block
  3. | `Flow
]

Mappings and sequences can be rendered in two different ways:

  • Flow styles can be thought of as the natural extension of JSON to cover folding long content lines for readability, tagging nodes to control construction of native data structures, and using anchors and aliases to reuse constructed object instances.
  • Block styles employ indentation rather than indicators to denote structure. This results in a more human readable (though less compact) notation.
include sig ... end
val layout_style_of_sexp : Sexplib.Sexp.t -> layout_style
val __layout_style_of_sexp__ : Sexplib.Sexp.t -> layout_style
val sexp_of_layout_style : layout_style -> Sexplib.Sexp.t
type 'a res = ('a, Rresult.R.msg) Result.result

This library uses the Rresult.R.msg conventions for returning errors rather than raising exceptions.

Serialisers and deserialisers

Most simple uses of Yaml can use the JSON-compatible subset. If you really need Yaml-specific features such as aliases, then they are also available.

JSON-compatible functions

val of_string : string -> value res

of_string s parses s into a JSON value representation, discarding any Yaml-specific information such as anchors or tags.

val of_string_exn : string -> value

of_string_exn s acts as of_string, but raises Invalid_argument if there is an error.

val to_string : ?len:int -> ?encoding:encoding -> ?scalar_style:scalar_style -> ?layout_style:layout_style -> value -> string res

to_string v converts the JSON value to a Yaml string representation. The encoding, scalar_style and layout_style control the various output parameters. The current implementation uses a non-resizable internal string buffer of 16KB, which can be increased via len.

val to_string_exn : ?len:int -> ?encoding:encoding -> ?scalar_style:scalar_style -> ?layout_style:layout_style -> value -> string

to_string_exn v acts as to_string, but raises Invalid_argument in if there is an error.

val pp : Format.formatter -> value -> unit

pp ppf s will output the Yaml value s to the formatter ppf.

Yaml-specific functions

val yaml_of_string : string -> yaml res

yaml_of_string s parses s into a Yaml yaml representation, preserving Yaml-specific information such as anchors.

val yaml_to_string : ?encoding:encoding -> ?scalar_style:scalar_style -> ?layout_style:layout_style -> yaml -> string res

yaml_to_string v converts the Yaml value to a string representation. The encoding, scalar_style and layout_style control the various output parameters. The current implementation uses a non-resizable internal string buffer of 16KB, which can be increased via len.

JSON/Yaml conversion functions

val to_json : yaml -> value res

to_json yaml will convert the Yaml document into a simpler JSON representation, discarding any anchors or tags from the original. Returns an error if any aliases are used within the body of the Yaml input.

val of_json : value -> yaml res

of_json j converts the JSON representation into a Yaml representation.

module Stream : sig ... end

Low-level event streaming interface for parsing and emitting YAML files.

OCaml

Innovation. Community. Security.