Crate kfl

source ·
Expand description

§KFL

mdbook

  • Nominal Typing
  • Trait-Based
  • Two-Level
  • Decode-Encode Dual
  • Literal

A KDL file format parser with great error reporting and convenient derive macros.

§About KDL

To give you some background on the KDL format. Here is a small example:

foo 1 "three" key="val" {
    bar
    (role)baz 1 2
}

Here is what are annotations for all the datum as described by the specification and this guide:

foo 1 "three" key="val" {                           ╮
─┬─ ┬ ───┬─── ────┬────                             │
 │  │    │        ╰───── property (can be multiple) │
 │  │    │                                          │
 │  ╰────┴────────────── arguments                  │
 │                                                  │
 ╰── node name                                      ├─ node "foo", with
                                                    │  "bar" and "baz"
    bar                                             │  being children
    (role)baz 1 2                                   │
     ──┬─                                           │
       ╰────── type name for node named "baz"       │
}                                                   ╯

§Usage

Most common usage of this library is using derive and [decode] or decode_children function:

use kfl::{Decode, DecodePartial, Encode};
use std::path::PathBuf;
#[cfg(feature = "http")]
use http::Uri;

#[derive(DecodePartial, Default)]
struct Document {
    #[kfl(children)]
    routes: Vec<Route>,
    #[kfl(children)]
    plugins: Vec<Plugin>,
}

#[derive(Decode, Encode)]
struct Route {
    #[kfl(argument)]
    path: PathBuf,
    #[kfl(children)]
    subroutes: Vec<Route>,
}

#[derive(Decode, Encode)]
struct Plugin {
    #[kfl(argument)]
    name: String,
    #[cfg(feature = "http")]
    #[kfl(property)]
    url: Uri,
}

let document = kfl::decode_children::<Document>("example.kdl", r#"
    route /api {
        route /api/v1
    }
    plugin "http" url=https://example.org/http
"#)?;

§License

Licensed under either of

§Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Re-exports§

Modules§

  • Structures that represent abstract syntax tree (AST) of the KDL document
  • Decode support stuff
  • Used by derive macro.
  • Error types for the kfl library
  • Display implementation for ast
  • kfl supports to kinds of the span for parsing
  • Traits used for the library

Macros§

  • Creates Box<str> from &str

Functions§

  • Parse KDL text and decode it into Rust object
  • Parse KDL text and decode Rust object
  • Parse KDL text and decode Rust object providing extra context for the decoder
  • Encode Rust object and print it into KDL text
  • Parse KDL text and decode Rust object
  • Parse KDL text and return AST
  • Print ast and return KDL text

Derive Macros§