Документация Engee

TOML

TOML.jl — это стандартная библиотека Julia для анализа и написания файлов TOML v1.0.

Анализ данных TOML

julia> using TOML

julia> data = """
           [database]
           server = "192.168.1.1"
           ports = [ 8001, 8001, 8002 ]
       """;

julia> TOML.parse(data)
Dict{String, Any} with 1 entry:
  "database" => Dict{String, Any}("server"=>"192.168.1.1", "ports"=>[8001, 8001…

Для анализа файла следует использовать TOML.parsefile. Если файл содержит синтаксическую ошибку, возникает исключение:

julia> using TOML

julia> TOML.parse("""
           value = 0.0.0
       """)
ERROR: TOML Parser error:
none:1:16 error: failed to parse value
      value = 0.0.0
                 ^
[...]

Существуют и другие версии функций анализа (TOML.tryparse и [TOML.tryparsefile]]), которые вместо вызова исключений при ошибке анализатора возвращают TOML.ParserError с информацией:

julia> using TOML

julia> err = TOML.tryparse("""
           value = 0.0.0
       """);

julia> err.type
ErrGenericValueError::ErrorType = 14

julia> err.line
1

julia> err.column
16

Экспорт данных в файл TOML

Функция TOML.print используется для вывода (или сериализации) данных в формате TOML.

julia> using TOML

julia> data = Dict(
          "names" => ["Julia", "Julio"],
          "age" => [10, 20],
       );

julia> TOML.print(data)
names = ["Julia", "Julio"]
age = [10, 20]

julia> fname = tempname();

julia> open(fname, "w") do io
           TOML.print(io, data)
       end

julia> TOML.parsefile(fname)
Dict{String, Any} with 2 entries:
  "names" => ["Julia", "Julio"]
  "age"   => [10, 20]

Ключи могут быть отсортированы в соответствии с определенным значением.

julia> using TOML

julia> TOML.print(Dict(
       "abc"  => 1,
       "ab"   => 2,
       "abcd" => 3,
       ); sorted=true, by=length)
ab = 2
abc = 1
abcd = 3

Для пользовательских структур передайте функцию, которая преобразует тип структуры в поддерживаемый.

julia> using TOML

julia> struct MyStruct
           a::Int
           b::String
       end

julia> TOML.print(Dict("foo" => MyStruct(5, "bar"))) do x
           x isa MyStruct && return [x.a, x.b]
           error("unhandled type $(typeof(x))")
       end
foo = [5, "bar"]

Справка

# TOML.parseFunction

parse(x::Union{AbstractString, IO})
parse(p::Parser, x::Union{AbstractString, IO})

Анализирует строку или поток x и возвращает результирующую таблицу (словарь). При сбое выводит ошибку ParserError.

См. также описание TOML.tryparse.

# TOML.parsefileFunction

parsefile(f::AbstractString)
parsefile(p::Parser, f::AbstractString)

Анализирует файл f и возвращает результирующую таблицу (словарь). При сбое выводит ошибку ParserError.

См. также описание TOML.tryparsefile.

# TOML.tryparseFunction

tryparse(x::Union{AbstractString, IO})
tryparse(p::Parser, x::Union{AbstractString, IO})

Анализирует строку или поток x и возвращает результирующую таблицу (словарь). При сбое выводит ошибку ParserError.

См. также описание TOML.parse.

# TOML.tryparsefileFunction

tryparsefile(f::AbstractString)
tryparsefile(p::Parser, f::AbstractString)

Анализирует файл f и возвращает результирующую таблицу (словарь). При сбое выводит ошибку ParserError.

См. также описание TOML.parsefile.

# TOML.printFunction

print([to_toml::Function], io::IO [=stdout], data::AbstractDict; sorted=false, by=identity)

Записывает данные (data) в виде синтаксиса TOML в поток ввода-вывода (io). Если именованный аргумент sorted имеет значение true, сортирует таблицы в соответствии с функцией, заданной именованным аргументом by.

Поддерживаются следующие типы данных: AbstractDict, AbstractVector, AbstractString, Integer, AbstractFloat, Bool, Dates.DateTime, Dates.Time, Dates.Date. Обратите внимание, что целые числа и числа с плавающей запятой должны поддерживать преобразование в Float64 и Int64, соответственно. Для других типов данных передайте функцию to_toml, которая принимает типы данных и возвращает значение поддерживаемого типа.

# TOML.ParserType

Parser()

Конструктор для анализатора (Parser) TOML. Обратите внимание, что в большинстве случаев не требуется создавать Parser явным образом. Вместо него следует напрямую использовать функцию TOML.parsefile или TOML.parse. Однако при использовании явного анализатора некоторые внутренние структуры данных будут применяться повторно, что может положительно сказаться на производительности при анализе большого количества небольших файлов.

# TOML.ParserErrorType

ParserError

Тип, возвращаемый из функций tryparse и tryparsefile при анализе файлов. Он содержит (помимо прочего) следующие поля:

  • pos — позиция в строке, когда произошла ошибка

  • table — результат, который на данный момент был успешно проанализирован

  • type — тип ошибки, разный для различных типов ошибок