parser.hpp #
Defines functions for parsing files or strings and the exceptions they use.
While parse
throws an exception on failure, try_parse
returns error information.
parse
#
Parses the content of a given file and returns a toml::basic_value
.
In case of failure, toml::syntax_error
is thrown.
The type information of basic_value
is provided by a template
, and the TOML language version is specified by toml::spec
.
parse(std::string filename, toml::spec)
#
namespace toml
{
template<typename TC = type_config>
basic_value<TC>
parse(std::string fname,
spec s = spec::default_version());
}
Parses the content of the given filename.
If reading the file fails, toml::file_io_error
is thrown.
If parsing fails, toml::syntax_error
is thrown.
parse(const char (&)[N] filename, toml::spec)
#
namespace toml
{
template<typename TC = type_config, std::size_t N>
basic_value<TC>
parse(const char (&fname)[N],
spec s = spec::default_version());
}
Parses the content of the given filename from a string literal.
If reading the file fails, toml::file_io_error
is thrown.
If parsing fails, toml::syntax_error
is thrown.
parse(std::filesystem::path, toml::spec)
#
namespace toml
{
template<typename TC = type_config>
basic_value<TC>
parse(const std::filesystem::path& fpath,
spec s = spec::default_version());
}
This is defined only if <filesystem>
is available.
Parses the content of the file at the given file path.
If reading the file fails, toml::file_io_error
is thrown.
If parsing fails, toml::syntax_error
is thrown.
parse(std::istream&, std::string filename, toml::spec)
#
namespace toml
{
template<typename TC = type_config>
basic_value<TC>
parse(std::istream& is,
std::string fname = "unknown file",
spec s = spec::default_version());
}
Parses the content of the given std::istream&
.
Open a stream in binary mode by passing std::ios::binary
to avoid inconsistency between the file size and the number of characters due to automatic conversion of newline characters by the standard library.
The filename information is taken as the third argument. If the filename is not provided, it defaults to "unknown file"
.
parse(FILE*, std::string filename, toml::spec)
#
namespace toml
{
template<typename TC = type_config>
result<basic_value<TC>, std::vector<error_info>>
parse(FILE* fp,
std::string filename,
spec s = spec::default_version());
}
Parses the content of the file pointed to by FILE*
.
Open a stream in binary mode by passing "rb"
to avoid inconsistency between the file size and the number of characters due to automatic conversion of newline characters by the standard library.
If reading the file fails, file_io_error
containing errno
is thrown.
If parsing fails, syntax_error
is thrown.
parse(std::vector<unsigned char>, std::string filename, toml::spec)
#
namespace toml
{
template<typename TC = type_config>
basic_value<TC>
parse(std::vector<unsigned char> content,
std::string filename,
spec s = spec::default_version());
}
Parses the byte sequence as a TOML file.
If parsing fails, toml::syntax_error
is thrown.
parse_str
#
parse_str(std::string, toml::spec)
#
namespace toml
{
template<typename TC = type_config>
basic_value<TC>
parse_str(std::string content,
spec s = spec::default_version(),
cxx::source_location loc = cxx::source_location::current());
}
Parses a string as a TOML file.
In case of failure, toml::syntax_error
is thrown.
The type information of basic_value
is provided by a template
, and the TOML language version is specified by toml::spec
.
You generally don’t need to manually set the third argument, cxx::source_location
.
If std::source_location
, std::experimental::source_location
, or __builtin_FILE
is available,
the location information where parse_str
was called will be stored.
try_parse
#
Parses the contents of the given file and returns a toml::basic_value
if successful, or a std::vector<toml::error_info>
if it fails.
The type information of basic_value
is specified by template
, and the version of the TOML language is specified by toml::spec
.
Unlike
parse
,try_parse
does not throw exceptions defined in toml11 such assyntax_error
. However, please note that exceptions thrown by the standard library will still propagate.For instance, errors occurring internally within
std::ifstream
or memory exhaustion instd::vector
will throw exceptions.
try_parse(std::string filename, toml::spec)
#
namespace toml
{
template<typename TC = type_config>
result<basic_value<TC>, std::vector<error_info>>
try_parse(std::string fname,
spec s = spec::default_version());
}
Takes a file name and parses its content.
If parsing fails, a result
holding the error type std::vector<error_info>
is returned.
If successful, a result
holding a basic_value
is returned.
try_parse(const char (&)[N] filename, toml::spec)
#
namespace toml
{
template<typename TC = type_config, std::size_t N>
result<basic_value<TC>, std::vector<error_info>>
try_parse(const char (&fname)[N],
spec s = spec::default_version());
}
Takes a string literal as a file name and parses its content.
If parsing fails, a result
holding the error type std::vector<error_info>
is returned.
If successful, a result
holding a basic_value
is returned.
try_parse(std::filesystem::path, toml::spec)
#
namespace toml
{
template<typename TC = type_config>
result<basic_value<TC>, std::vector<error_info>>
try_parse(const std::filesystem::path& fpath,
spec s = spec::default_version());
}
Takes a file path and parses its content.
If parsing fails, a result
holding the error type std::vector<error_info>
is returned.
If successful, a result
holding a basic_value
is returned.
try_parse(std::istream&, std::string filename, toml::spec)
#
namespace toml
{
template<typename TC = type_config>
result<basic_value<TC>, std::vector<error_info>>
try_parse(std::istream& is,
std::string fname = "unknown file",
spec s = spec::default_version());
}
Takes a std::istream&
and parses its content.
Open a stream in binary mode by passing std::ios::binary
to avoid inconsistency between the file size and the number of characters due to automatic conversion of newline characters by the standard library.
The file name information is taken as the second argument. If a file name is not provided, it defaults to "unknown file"
.
If parsing fails, a result
holding the error type std::vector<error_info>
is returned.
If successful, a result
holding a basic_value
is returned.
try_parse(FILE*, std::string filename, toml::spec)
#
namespace toml
{
template<typename TC = type_config>
result<basic_value<TC>, std::vector<error_info>>
try_parse(FILE* fp,
std::string filename,
spec s = spec::default_version());
}
Takes a FILE*
and parses its content.
Open a stream in binary mode by passing "rb"
to avoid inconsistency between the file size and the number of characters due to automatic conversion of newline characters by the standard library.
If parsing fails, a result
holding the error type std::vector<error_info>
is returned.
If successful, a result
holding a basic_value
is returned.
try_parse(std::vector<unsigned char>, std::string filename, toml::spec)
#
namespace toml
{
template<typename TC = type_config>
result<basic_value<TC>, std::vector<error_info>>
try_parse(std::vector<unsigned char> content,
std::string filename,
spec s = spec::default_version());
}
Takes a byte array and parses its content as a TOML file.
If parsing fails, a result
holding the error type std::vector<error_info>
is returned.
If successful, a result
holding a basic_value
is returned.
try_parse_str
#
try_parse_str(std::string, toml::spec)
#
namespace toml
{
template<typename TC = type_config>
result<basic_value<TC>, std::vector<error_info>>
try_parse_str(std::string content,
spec s = spec::default_version(),
cxx::source_location loc = cxx::source_location::current());
}
Parses a string as a TOML file, returning a toml::basic_value
if successful, or a std::vector<toml::error_info>
if it fails.
Unlike parse_str
, it does not throw syntax_error
, but instead returns error information as the failure type of the result
.
If std::source_location
, std::experimental::source_location
, or __builtin_FILE
is available, it will record the location information.
Typically, you do not need to manually set the third argument cxx::source_location
. If any of std::source_location
, std::experimental::source_location
, or __builtin_FILE
are available, the information of the location where parse_str
was called will be saved as the location information.
Unlike
parse
,try_parse
does not throw exceptions defined in toml11 such assyntax_error
. However, please note that exceptions thrown by the standard library will still propagate.For instance, errors occurring internally within
std::ifstream
or memory exhaustion instd::vector
will throw exceptions.
syntax_error
#
namespace toml
{
struct syntax_error final : public ::toml::exception
{
public:
syntax_error(std::string what_arg, std::vector<error_info> err);
~syntax_error() noexcept override = default;
const char* what() const noexcept override;
std::vector<error_info> const& errors() const noexcept
};
}
An exception thrown when a syntax error is detected in TOML.
It is thrown by parse
but not by try_parse
.
file_io_error
#
namespace toml
{
struct file_io_error final : public ::toml::exception
{
public:
file_io_error(const std::string& msg, const std::string& fname);
file_io_error(int errnum, const std::string& msg, const std::string& fname);
~file_io_error() noexcept override = default;
const char* what() const noexcept override;
bool has_errno() const noexcept;
int get_errno() const noexcept;
};
}
An exception thrown when reading the contents of a file fails.
When using FILE*
to read a file, errno
is set.
has_errno
#
If std::ifstream
fails, errno
is not set.
In this case, has_errno
returns false
.
get_errno
#
Particularly when passing a FILE*
, retrieves the value of errno
.
If has_errno
is false
, it returns 0
.