Кодирование YAML

Разбор YAML-документов в Lua-таблицы и сериализация Lua-значений в YAML-строки.

Загрузка

local yaml = require("yaml")

Кодирование

Кодирование значения

Преобразует Lua-таблицу в формат YAML.

-- Простые пары ключ-значение
local config = {
    name = "myapp",
    port = 8080,
    debug = true
}
local out = yaml.encode(config)
-- name: myapp
-- port: 8080
-- debug: true

-- Массивы становятся YAML-списками
local items = {"apple", "banana", "cherry"}
yaml.encode(items)
-- - apple
-- - banana
-- - cherry

-- Вложенные структуры
local server = {
    http = {
        address = ":8080",
        timeout = "30s"
    },
    database = {
        host = "localhost",
        port = 5432
    }
}
yaml.encode(server)
Параметр Тип Описание
data table Lua-таблица для кодирования
options table? Опции кодирования (опционально)

Опции

Поле Тип Описание
field_order string[] Порядок полей — поля выводятся в указанном порядке
sort_unordered boolean Сортировать поля, не указанные в field_order, по алфавиту
-- Управление порядком полей в выводе
local entry = {
    zebra = 1,
    alpha = 2,
    name = "test",
    kind = "demo"
}

-- Поля выводятся в указанном порядке, остальные сортируются
local result = yaml.encode(entry, {
    field_order = {"name", "kind"},
    sort_unordered = true
})
-- name: test
-- kind: demo
-- alpha: 2
-- zebra: 1

-- Просто отсортировать все поля по алфавиту
yaml.encode(entry, {sort_unordered = true})
-- alpha: 2
-- kind: demo
-- name: test
-- zebra: 1

Возвращает: string, error

Декодирование

Разбор строки

Разбирает YAML-строку в Lua-таблицу.

-- Разбор конфигурации
local config, err = yaml.decode([[
server:
  host: localhost
  port: 8080
features:
  - auth
  - logging
  - metrics
]])
if err then
    return nil, err
end

print(config.server.host)     -- "localhost"
print(config.server.port)     -- 8080
print(config.features[1])     -- "auth"

-- Разбор содержимого файла
local content = fs.read("config.yaml")
local settings, err = yaml.decode(content)
if err then
    return nil, errors.wrap(err, "invalid config file")
end

-- Работа со смешанными типами
local data = yaml.decode([[
name: test
count: 42
ratio: 3.14
enabled: true
tags:
  - lua
  - wippy
]])
print(type(data.count))    -- "number"
print(type(data.enabled))  -- "boolean"
print(type(data.tags))     -- "table"
Параметр Тип Описание
data string YAML-строка для разбора

Возвращает: any, error — возвращает table, array, string, number или boolean в зависимости от содержимого YAML

Ошибки

Условие Kind Повторяемо
На вход не таблица (encode) errors.INVALID нет
На вход не строка (decode) errors.INVALID нет
Пустая строка (decode) errors.INVALID нет
Неверный синтаксис YAML errors.INTERNAL нет

См. Обработка ошибок для работы с ошибками.