Config-UCL
view release on metacpan or search on metacpan
libucl-0.8.1/doc/api.md view on Meta::CPAN
- [ucl_iterate_object](#ucl_iterate_object)
- [Validation functions](#validation-functions-1)
- [ucl_object_validate](#ucl_object_validate)
# Synopsis
`#include <ucl.h>`
# Description
Libucl is a parser and `C` API to parse and generate `ucl` objects. Libucl consist of several groups of functions:
### Parser functions
Used to parse `ucl` files and provide interface to extract `ucl` object. Currently, `libucl` can parse only full `ucl` documents, for instance, it is impossible to parse a part of document and therefore it is impossible to use `libucl` as a streaming...
### Emitting functions
Convert `ucl` objects to some textual or binary representation. Currently, libucl supports the following exports:
- `JSON` - valid json format (can possibly lose some original data, such as implicit arrays)
- `Config` - human-readable configuration format (lossless)
- `YAML` - embedded yaml format (has the same limitations as `json` output)
### Conversion functions
Help to convert `ucl` objects to C types. These functions are used to convert `ucl_object_t` to C primitive types, such as numbers, strings or boolean values.
### Generation functions
Allow creation of `ucl` objects from C types and creating of complex `ucl` objects, such as hashes or arrays from primitive `ucl` objects, such as numbers or strings.
### Iteration functions
Iterate over `ucl` complex objects or over a chain of values, for example when a key in an object has multiple values (that can be treated as implicit array or implicit consolidation).
### Validation functions
Validation functions are used to validate some object `obj` using json-schema compatible object `schema`. Both input and schema must be UCL objects to perform validation.
### Utility functions
Provide basic utilities to manage `ucl` objects: creating, removing, retaining and releasing reference count and so on.
# Parser functions
Parser functions operates with `struct ucl_parser`.
### ucl_parser_new
~~~C
struct ucl_parser* ucl_parser_new (int flags);
~~~
Creates new parser with the specified flags:
- `UCL_PARSER_KEY_LOWERCASE` - lowercase keys parsed
- `UCL_PARSER_ZEROCOPY` - try to use zero-copy mode when reading files (in zero-copy mode text chunk being parsed without copying strings so it should exist till any object parsed is used)
- `UCL_PARSER_NO_TIME` - treat time values as strings without parsing them as floats
### ucl_parser_register_macro
~~~C
void ucl_parser_register_macro (struct ucl_parser *parser,
const char *macro, ucl_macro_handler handler, void* ud);
~~~
Register new macro with name .`macro` parsed by handler `handler` that accepts opaque data pointer `ud`. Macro handler should be of the following type:
~~~C
bool (*ucl_macro_handler) (const unsigned char *data,
size_t len, void* ud);`
~~~
Handler function accepts macro text `data` of length `len` and the opaque pointer `ud`. If macro is parsed successfully the handler should return `true`. `false` indicates parsing failure and the parser can be terminated.
### ucl_parser_register_variable
~~~C
void ucl_parser_register_variable (struct ucl_parser *parser,
const char *var, const char *value);
~~~
Register new variable $`var` that should be replaced by the parser to the `value` string.
### ucl_parser_add_chunk
~~~C
bool ucl_parser_add_chunk (struct ucl_parser *parser,
const unsigned char *data, size_t len);
~~~
Add new text chunk with `data` of length `len` to the parser. At the moment, `libucl` parser is not a streamlined parser and chunk *must* contain the *valid* ucl object. For example, this object should be valid:
~~~json
{ "var": "value" }
~~~
while this one won't be parsed correctly:
~~~json
{ "var":
~~~
This limitation may possible be removed in future.
### ucl_parser_add_string
~~~C
bool ucl_parser_add_string (struct ucl_parser *parser,
const char *data, size_t len);
~~~
This function acts exactly like `ucl_parser_add_chunk` does but if `len` argument is zero, then the string `data` must be zero-terminated and the actual length is calculated up to `\0` character.
### ucl_parser_add_file
~~~C
bool ucl_parser_add_file (struct ucl_parser *parser,
const char *filename);
~~~
Load file `filename` and parse it with the specified `parser`. This function uses `mmap` call to load file, therefore, it should not be `shrunk` during parsing. Otherwise, `libucl` can cause memory corruption and terminate the calling application. Th...
### ucl_parser_get_object
~~~C
ucl_object_t* ucl_parser_get_object (struct ucl_parser *parser);
~~~
( run in 0.933 second using v1.01-cache-2.11-cpan-39bf76dae61 )