Lowest computational overhead, equivalent to Yams.Node.
Encoding: YAMLEncoder.encode(_:)
Produces a YAML String from an instance of type conforming to Encodable.
Decoding: YAMLDecoder.decode(_:from:)
Decodes an instance of type conforming to Decodable from YAML String or
Data.
import Foundation
import Yams
struct S: Codable {
var p: String
}
let s = S(p: "test")
let encoder = YAMLEncoder()
let encodedYAML = try encoder.encode(s)
encodedYAML == """
p: test
"""
let decoder = YAMLDecoder()
let decoded = try decoder.decode(S.self, from: encodedYAML)
s.p == decoded.p
Swift Standard Library types
The type of Swift Standard Library is inferred from the contents of the
internal Yams.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 YAML String from an instance of Swift Standard Library types.
Decoding: Yams.load(yaml:)
Produces an instance of Swift Standard Library types as Any from YAML
String.
// [String: Any]
let dictionary: [String: Any] = ["key": "value"]
let mapYAML: String = try Yams.dump(object: dictionary)
mapYAML == """
key: value
"""
let loadedDictionary = try Yams.load(yaml: mapYAML) as? [String: Any]
// [Any]
let array: [Int] = [1, 2, 3]
let sequenceYAML: String = try Yams.dump(object: array)
sequenceYAML == """
- 1
- 2
- 3
"""
let loadedArray: [Int]? = try Yams.load(yaml: sequenceYAML) as? [Int]
// Any
let string = "string"
let scalarYAML: String = try Yams.dump(object: string)
scalarYAML == """
string
"""
let loadedString: String? = try Yams.load(yaml: scalarYAML) as? 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 YAML String from an instance of Node.
Decoding Yams.compose(yaml:)
Produces an instance of Node from YAML String.
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:
Yams
A sweet and swifty YAML parser built on LibYAML.
Installation
Building Yams requires Xcode 12.5+ or a Swift 5.4+ 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:
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:
Swift Package Manager
Add
.package(url: "https://github.com/jpsim/Yams.git", from: "5.0.5")
to yourPackage.swift
file’sdependencies
.CocoaPods
Add
pod 'Yams'
to yourPodfile
.Carthage
Add
github "jpsim/Yams"
to yourCartfile
.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
typesYams.Node
.YAMLEncoder.encode(_:)
Produces a YAMLString
from an instance of type conforming toEncodable
.YAMLDecoder.decode(_:from:)
Decodes an instance of type conforming toDecodable
from YAMLString
orData
.Swift Standard Library types
Yams.Node
representation by matching regular expressions.JSONSerialization
or if the input is already standard library types (Any
,Dictionary
,Array
, etc.).Yams.dump(object:)
Produces a YAMLString
from an instance of Swift Standard Library types.Yams.load(yaml:)
Produces an instance of Swift Standard Library types asAny
from YAMLString
.Yams.Node
Yams.serialize(node:)
Produces a YAMLString
from an instance ofNode
.Yams.compose(yaml:)
Produces an instance ofNode
from YAMLString
.Integrating with Combine
When Apple’s Combine framework is available,
YAMLDecoder
conforms to theTopLevelDecoder
protocol, which allows it to be used with thedecode(type:decoder:)
operator:License
Both Yams and libYAML are MIT licensed.