Yams
A sweet and swifty YAML parser built on
LibYAML.
Installation
Building Yams requires Xcode 11.x or a Swift 5.1+ toolchain with the
Swift Package Manager or CMake and Ninja.
CMake
CMake 3.17.2 or newer is required, along with Ninja 1.9.0 or newer.
When building for non-Apple platforms:
cmake -B /path/to/build -G Ninja -S /path/to/yams -DCMAKE_BUILD_TYPE=Release -DFoundation_DIR=/path/to/foundation/build/cmake/modules
cmake --build /path/to/build
To build for Apple platforms (macOS, iOS, tvOS, watchOS), there is no
need to spearately build Foundation because it is included as part of
the SDK:
cmake -B /path/to/build -G Ninja -S /path/to/yams -DCMAKE_BUILD_TYPE=Release
cmake --build /path/to/build
Swift Package Manager
Add .package(url: "https://github.com/jpsim/Yams.git", from: "4.0.6")
to your
Package.swift
file's dependencies
.
CocoaPods
Add pod 'Yams'
to your Podfile
.
Carthage
Add github "jpsim/Yams"
to your Cartfile
.
Bazel
In your WORKSPACE file
Usage
Yams has three groups of conversion APIs:
one for use with Codable
types,
another for Swift Standard Library types,
and a third one for a Yams-native representation.
Codable
types
- Codable is an encoding & decoding strategy introduced in Swift 4
enabling easy conversion between YAML and other Encoders like
JSONEncoder and PropertyListEncoder. - Lowest computational overhead, equivalent to
Yams.Node
. - Encoding:
YAMLEncoder.encode(_:)
Produces a YAMLString
from an instance of type conforming toEncodable
. - Decoding:
YAMLDecoder.decode(_:from:)
Decodes an instance of type conforming toDecodable
from YAMLString
or
Data
.
Swift Standard Library types
- The type of Swift Standard Library is inferred from the contents of the
internalYams.Node
representation by matching regular expressions. - This method has the largest computational overhead When decoding YAML, because
the type inference of all objects is done up-front. - It may be easier to use in such a way as to handle objects created from
JSONSerialization
or if the input is already standard library types
(Any
,Dictionary
,Array
, etc.). - Encoding:
Yams.dump(object:)
Produces a YAMLString
from an instance of Swift Standard Library types. - Decoding:
Yams.load(yaml:)
Produces an instance of Swift Standard Library types asAny
from YAML
String
.
Yams.Node
- Yams' native model representing Nodes of YAML which provides all
functions such as detection and customization of the YAML format. - Depending on how it is used, computational overhead can be minimized.
- Encoding:
Yams.serialize(node:)
Produces a YAMLString
from an instance ofNode
. - Decoding
Yams.compose(yaml:)
Produces an instance ofNode
from YAMLString
.
Integrating with Combine
When Apple's Combine framework is available, YAMLDecoder
conforms to the
TopLevelDecoder
protocol, which allows it to be used with the
decode(type:decoder:)
operator:
License
Both Yams and libYAML are MIT licensed.