TOML

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

Parsing TOML data

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

Exporting data to TOML file

The TOML.print function is used to print (or serialize) data into TOML format.

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"]

References

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

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

Смотрите также TOML.tryparse.

source
TOML.parsefileFunction
parsefile(f::AbstractString)
parsefile(p::Parser, f::AbstractString)

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

Смотрите также TOML.tryparsefile.

source
TOML.tryparseFunction
tryparse(x::Union{AbstractString, IO})
tryparse(p::Parser, x::Union{AbstractString, IO})

Разберите строку или поток x и верните результирующую таблицу (словарь). Верните ParserError в случае неудачи.

Смотрите также TOML.parse.

source
TOML.tryparsefileFunction
tryparsefile(f::AbstractString)
tryparsefile(p::Parser, f::AbstractString)

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

Смотрите также TOML.parsefile.

source
TOML.printFunction
print([to_toml::Function], io::IO [=stdout], data::AbstractDict; sorted=false, by=identity, inline_tables::IdSet{<:AbstractDict})

Запишите data в синтаксисе TOML в поток io. Если аргумент ключевого слова sorted установлен в true, отсортируйте таблицы в соответствии с функцией, заданной аргументом ключевого слова by. Если аргумент ключевого слова inline_tables задан, это должен быть набор таблиц, которые должны быть напечатаны "встроенно".

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

source
TOML.ParserType
Parser()

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

source
TOML.ParserErrorType
ParserError

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

  • pos, позиция в строке, когда произошла ошибка
  • table, результат, который до сих пор был успешно разобран
  • type, тип ошибки, различный для разных типов ошибок
source