/** @mainpage Qore yaml Module
@tableofcontents
@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 = make_yaml($data, YAML::Canonical);
@endcode
@par To deserialize a YAML string to a Qore value:
@code
%requires yaml
my any $data = parse_yaml($yaml_str);
@endcode
@section yaml_functions Available Functions
|!Function|!Description|
|@ref make_yaml()|creates a %YAML string from Qore data|
|@ref parse_yaml()|parses a %YAML string and returns Qore data|
|@ref get_yaml_info()|returns version information about libyaml|
@section yaml_deprecated_functions Deprecated Functions
The following camel-case functions were deprecated in yaml 0.5:
|!Deprecated Function|!New Function|
|@ref makeYAML()|@ref make_yaml()|
|@ref parseYAML()|@ref parse_yaml()|
|@ref getYAMLInfo()|@ref get_yaml_info()|
@section qore_to_yaml_type_mappings Qore to YAML Type Mappings
Note that all Qore types except objects can be serialized to YAML,
however \c NULL will be deserialized as \c NOTHING.
|!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
@section yamlreleasenotes Release Notes
@subsection yaml051 yaml Module Version 0.5.1
- DataStreamClient update:
- fixed bugs handling chunked non-DataStream messages (issue 1438)
- DataStreamUtil update:
- fixed bugs handling chunked non-DataStream messages (issue 1438)
@subsection yaml05 yaml Module Version 0.5
New Features and Bug Fixes
- new user modules for DataStream protocol support: YAML-encoded HTTP chunked transfers where each chunk is a unique data entity
- DataStreamClient user module
- DataStreamRequestHandler user module
- DataStreamUtil user module
- user modules moved to top-level qore module directory from version-specific module directory since they are valid for multiple versions of qore
- date/time values (yaml !!timestamp type) are now always returned in the current time zone locale so that time zone rules can be applied to deserialized dates; previously time zone information was always lost which could cause errors when performing date arithmetic on deserialized yaml dates
- fixed bugs deserializing canonically-encoded YAML strings; arbitrary-precision numeric values were deserialized with their precision values ignored and floating point +/-inf were deserialized as zero
- deprecated old camel-case names and implemented new function names confirming to the standard naming convention for functions
@subsection yaml04 yaml Module Version 0.4
New Features and Bug Fixes
- fixed a problem serializing and deserializing 0-length durations; they were serialized as \c "P" and then deserialized as a string; now they are serialized as \c "P0D" and deserialized correctly as a zero-length duration
- enhanced the YamlRpcHandler module for more flexible logging
- added the MIT license as a source license option
@subsection yaml03 yaml Module Version 0.3
New Features and Bug Fixes
- fixed a problem where an exception was not raised with invalid YAML input when parsing, instead NOTHING was returned
- fixed a problem deserializing integers; the number was converted to a C++ double (floating-point type) first, causing precision to be lost with large numbers
- added support for Qore's new number type when compiled with Qore 0.8.6+
- added support for serializing special floating point numbers (nan as \@nan\@, inf as \@inf\@)
@subsection yaml02 yaml Module Version 0.2
New Features and Bug Fixes
- fixed a problem with deserializing untagged and not double quoted integer and floating-point 0 and 0.0; they were incorrectly deserialized as strings
- added additional information to the exception when a scalar value cannot be serialized (normally this happens when a string has an encoding error)
*/