pluie-yaml/README.md

123 lines
2.8 KiB
Markdown
Raw Normal View History

2018-08-01 13:10:12 +00:00
# pluie-yaml
2018-08-01 15:15:45 +00:00
**pluie-yaml** is a vala shared library managing yaml files (v 1.2) and yaml nodes in vala language.
As json is now a valid subset of yaml, you can use this lib to load json files too.
2018-08-01 13:10:12 +00:00
2018-08-01 15:15:45 +00:00
The purpose of this project is to make vala able to load and deal with yaml configuration files.
2018-08-01 15:49:01 +00:00
So, currently the lib deal only with one yaml document, but an @import clause (nodemap) is plan in order to load a subset of yaml files in the main yaml document.
2018-08-01 15:15:45 +00:00
**pluie-yaml** use the ![libyaml c library](https://github.com/yaml/libyaml) (License MIT, many thanks to Kirill Simonov) to parse and retriew related yaml events.
## License
GNU GPL v3
2018-08-01 13:10:12 +00:00
## Prerequisites
2018-08-01 15:15:45 +00:00
`valac meson ninja glib gee gobject pluie-echo`
2018-08-01 13:10:12 +00:00
## Install
2018-08-01 15:15:45 +00:00
git clone the project then cd to project directory and do :
2018-08-01 13:10:12 +00:00
```
meson --prefix=/usr ./ build
sudo ninja install -C build
```
## Compilation
```
valac --pkg gee-0.8 --pkg pluie-echo-0.2 --pkg pluie-yaml-0.3 main.vala
```
2018-08-01 15:15:45 +00:00
see https://git.pluie.org/pluie/libpluie-echo in order to install pluie-echo-0.2 pkg
you can use `./build.sh` to rebuild/install the **pluie-yaml** lib and compile samples files
2018-08-01 13:10:12 +00:00
## Api / Documentation
https://pluie.org/pluie-yaml-0.3/index.htm
(comming soon)
## Docker
2018-08-01 15:15:45 +00:00
a demo image will be available soon on docker hub. you will be able to run a container with :
2018-08-01 13:10:12 +00:00
```
docker run --rm -it pluie/libyaml
```
## Usage
2018-08-01 15:49:01 +00:00
### config
```
var config = new Yaml.Config (path);
var node = config.get ("ship-to.address.city{0}");
if (node != null) {
of.echo (node.data)
}
```
2018-08-01 15:15:45 +00:00
### loader
2018-08-01 13:10:12 +00:00
```
2018-08-01 15:15:45 +00:00
var path = "./config/main.yml";
// uncomment to enable debug
// Pluie.Yaml.Scanner.DEBUG = true;
var loader = new Yaml.Loader (path /* , displayFile, displayNode */);
2018-08-01 13:10:12 +00:00
if ((done = loader.done)) {
Yaml.NodeRoot root = loader.get_nodes ();
root.display_childs ();
}
```
2018-08-01 15:15:45 +00:00
### finder
**lib-yaml** provide a `Yaml.Finder` to easily retriew a particular yaml node.
Search path definition has two mode.
The default mode is `Yaml.FIND_MODE.SQUARE_BRACKETS`
- node's key name must be enclosed in square brackets
- sequence entry must be enclosed in curly brace
ex : `[grandfather][father][son]{2}[age]`
The Other mode is Yaml.FIND_MODE.DOT
- child mapping node are separated by dot
- sequence entry must be enclosed in curly brace
ex : `grandfather.father.son{2}.age`
with singlepair node, you can retriew corresponding scalar node with {0}
```
/*
# ex yaml file :
product:
- sku : BL394D
quantity : 4
description : Basketball
*/
...
Yaml.NodeRoot root = loader.get_nodes ();
Yaml.Node? node = null;
if ((node = finder.find("product{0}.description{0}")) != null) {
var val = node.data;
}
```
2018-08-01 13:10:12 +00:00
### more samples
see samples files in ./samples directory
2018-08-01 15:15:45 +00:00
### todo
2018-08-01 15:49:01 +00:00
* import clause
2018-08-01 15:15:45 +00:00
* fix nodes traversing
2018-08-01 15:49:01 +00:00
* dumper