TOMLKit
A small, simple TOML parser and serializer for Swift. Powered by toml++.
Install / Use
/learn @LebJe/TOMLKitREADME
TOMLKit
A small, simple TOML parser and serializer for Swift. Powered by toml++.
TOMLKit is a Swift wrapper around toml++, allowing you to parse and serialize TOML files in Swift.
Table of Contents
<!--ts--> <!-- Added by: lebje, at: Fri Apr 1 15:58:35 EDT 2022 --> <!--te-->Created by gh-md-toc
Installation
Swift Package Manager
Add this to the dependencies array in Package.swift:
.package(url: "https://github.com/LebJe/TOMLKit.git", from: "0.5.0")
Also add this to the targets array in the aforementioned file:
.product(name: "TOMLKit", package: "TOMLKit")
Quick Start
import TOMLKit
import struct Foundation.Date
let toml = """
string = "Hello, World!"
int = 523053
double = 3250.34
"""
struct Test: Codable {
let string: String
let int: Int
let double: Double
}
do {
let table = try TOMLTable(string: toml)
table.remove(at: "double")
table["dateTime"] = TOMLDateTime(date: Foundation.Date())
table.insert(
TOMLArray([1, 2, "3", TOMLTable(["time": TOMLTime(hour: 10, minute: 26, second: 49, nanoSecond: 203)])]),
at: "array"
)
let test = Test(string: "Goodbye, World!", int: 24598, double: 18.247)
let encodedTest: TOMLTable = try TOMLEncoder().encode(test)
let decodedTest = try TOMLDecoder().decode(Test.self, from: encodedTest)
print("----Encoding & Decoding----\n")
print("Encoded Test: \n\(encodedTest)\n")
print("Decoded Test: \(decodedTest)")
print("\n----Conversion----\n")
print("TOML:\n\(table.convert(to: .toml))\n")
print("JSON:\n\(table.convert(to: .json))\n")
print("YAML:\n\(table.convert(to: .yaml))")
} catch let error as TOMLParseError {
// TOMLParseError occurs when the TOML document is invalid.
// `error.source.begin` contains the line and column where the error started,
// and `error.source.end` contains the line where the error ended.
print(error.source.begin)
print(error.source.end)
}
// ----Encoding & Decoding----
//
// Encoded Test:
// double = 18.247
// int = 24598
// string = 'Goodbye, World!'
//
// Decoded Test: Test(string: "Goodbye, World!", int: 24598, double: 18.247)
//
// ----Conversion----
//
// TOML:
// array = [ 1, 2, '3', { time = 10:26:49.000000203 } ]
// dateTime = 2022-03-31T12:19:38.160653948Z
// int = 523053
// string = 'Hello, World!'
//
// JSON:
// {
// "array" : [
// 1,
// 2,
// "3",
// {
// "time" : "10:26:49.000000203"
// }
// ],
// "dateTime" : "2022-03-31T12:19:38.160653948Z",
// "int" : 523053,
// "string" : "Hello, World!"
// }
//
// YAML:
// array:
// - 1
// - 2
// - 3
// - time: '10:26:49.000000203'
// dateTime: '2022-03-31T12:19:38.160653948Z'
// int: 523053
// string: 'Hello, World!'
Full Documentation
Full documentation is available here.
Dependencies
Licenses
The toml++ license is available in the tomlplusplus directory in the LICENSE file.
Contributing
Before committing, please install pre-commit, swift-format, clang-format, and Prettier, then install the pre-commit hook:
$ brew bundle # install the packages specified in Brewfile
$ pre-commit install
# Commit your changes.
To install pre-commit on other platforms, refer to the documentation.
Related Skills
node-connect
344.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
96.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
344.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
344.1kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
