/** @mainpage Qore yaml Module @tableofcontents Contents of this documentation: - @ref yamlintro - @ref functions - @ref qore_to_yaml_type_mappings - @ref yaml_emitter_option_constants - @ref yamlreleasenotes @section yamlintro Introduction The yaml module provides YAML functionality to Qore, allowing qore programs to read and write information in %YAML syntax. This module is released under a choice of two licenses: - LGPL 2.1 - MIT (see COPYING.MIT in the source distribution for more information) . The module is tagged as such in the module's header (meaning it can be loaded unconditionally regardless of how the %Qore library was initialized). Like all Qore components, the yaml module is thread-safe. The underlying %YAML functionality is provided by libyaml. User modules implementing the following HTTP-based protocols using YAML for data serialization are included: - YAML-RPC: similar to JSON-RPC but using YAML-serialized data (YamlRpcClient, YamlRpcHandler) - DataStream: allows for data streaming with HTTP 1.1 chunked data transfers where each chunk is a unique data entity (DataStreamUtil, DataStreamClient, DataStreamRequestHandler) Also included with the binary yaml module: - DataStreamUtil user module - DataStreamClient user module - DataStreamRequestHandler user module - YamlRpcClient user module - YamlRpcHandler user module @section Examples @par To serialize a simple value or a complex data structure to a YAML string: @code %requires yaml my string $yaml_str = makeYAML($data, YAML::Canonical); @endcode @par To deserialize a YAML string to a Qore value: @code %requires yaml my any $data = parseYAML($yaml_str); @endcode @section functions Available Functions @htmlonly @endhtmlonly
Function | Description |
@ref makeYAML() | creates a %YAML string from Qore data |
@ref parseYAML() | parses a %YAML string and returns Qore data |
@ref getYAMLInfo() | returns version information about libyaml |
QoreType | YAML Tag | Qore Example | YAML Example | Notes |
int | \c !!int | \c 300 | \c 300 | direct serialization |
float | \c !!float | \c 3.5 | \c 3.5 | direct serialization; infinity is serialized as \@inf\@, "not a number" as \@nan\@ |
number | \c !number | \c 3.5 | 3.5n{128} | String serialization in scientific notation (for brevity) with the number appended with an \c "n"; the number is serialized so that no precision is lost. Infinity is serialized as \@inf\@n{128}, "not a number" as \@nan\@n{128} The precision is appended to the string in curly brackets (ex: \"1.1n{128}" means the number 1.1 with 128 bits of precision) This tag is a custom tag used only by Qore to serialize Qore arbitrary-precision numeric values with YAML |
string | \c !!str | \c "hello" | \c "hello" | YAML strings are enclosed in double-quotes, and libyaml will perform escaping as necessary to form a proper YAML string |
bool | \c !!bool | \c True | \c true | direct serialization to \c true and \c false |
date (relative) | \c !duration | \c P2M3DT10H14u | \c P2M3DT10H14u | Relative date/time values (durations) are serialized with Qore's ISO-8601-based format. This tag is a custom tag used only by Qore to serialize Qore relative date/time values with YAML |
date (absolute) | \c !!timestamp | \c 2010-05-05T15:35:02.100 | \c 2010-05-05T15:35:02.1+02:00 | Absolute date/time values are serialized with YAML's timestamp format. Note that qore date/time values without an explicit time zone are assumed to be in the local time zone. When converting a YAML timestamp to a Qore date, because Qore supports only up to microsecond resolution in date/time values, any digits after microseconds are lost. |
NOTHING | \c !!null | \c NOTHING | \c null | direct serialization |
NULL | \c !!null | \c NULL | \c null | serialization to YAML null, just like \c NOTHING; will be deserialized as \c NOTHING. |
list | \c !!seq | \c (1, 2, "three") | \c [1, 2, "three"] | direct serialization |
hash | \c !!map | \c ("key" : 1, "other" : 2.0, "data" : "three") | \c {key: 1, other: 2.0, data: "three"} | direct serialization, although qore will maintain key order as well even though this property is only defined for an ordered map |