oneline_template/lib.rs
1//! # One-line template
2//! One-line template is library for serialization structures in one-line string.
3//! This library is helpful for path formatting.
4//!
5//! ## Template format
6//!
7//! * Path navigation: `{self}`, `{self.field_1.field_2}`, `{self.0}`
8//! * Value processing: `{self | uint:hex() | string:substr(0uint, 2uint)|string:unwrap_or('--')}`
9//!
10//! ## Example
11//!
12//!```rust
13//! use oneline_template::template::TemplateBuilder;
14//!
15//! #[derive(serde_derive::Serialize)]
16//! struct FileId {
17//! file_id: u32,
18//! }
19//!
20//! fn main() {
21//! let template_builder = TemplateBuilder::new();
22//! let template = template_builder.build("directory/file_no_{ self.file_id }.json").expect("Unable to create template");
23//!
24//! let file_id = FileId {file_id: 1};
25//! let path = template.serialize(&file_id).expect("Unable to format path");
26//! assert_eq!("directory/file_no_1.json", &path);
27//! }
28//!```
29//! ## Custom function
30//!
31//! You can implement your own processing function. Contribution in this project is welcomed!
32//!
33//! ```rust
34//!
35//! use oneline_template::function_executor::*;
36//! use oneline_template::template::TemplateBuilder;
37//!
38//! /// Function: `uint::neg`
39//! ///
40//! /// Input: `uint`
41//! ///
42//! /// Returns `uint`
43//! pub struct Neg;
44//!
45//! impl FunctionExecutor for Neg {
46//! fn schema(&self) -> FunctionSchema {
47//! FunctionSchema::new("uint:neg")
48//! }
49//!
50//! fn call(&self, value: Value, _arguments: &[Value]) -> Result<Value, FunctionError> {
51//! let value = value.as_uint()?;
52//! let value = !value;
53//! let value = Value::UInt(value);
54//! return Ok(value);
55//! }
56//! }
57//!
58//! #[derive(serde_derive::Serialize)]
59//! struct FileId {
60//! file_id: u32,
61//! }
62//!
63//! fn main() {
64//! let template_builder = TemplateBuilder::new();
65//! let template_builder = template_builder.with_function(Neg);
66//! let template = template_builder.build("directory/file_no_{ self.file_id | uint:neg( ) | uint:hex( ) }.json").expect("Unable to create template");
67//!
68//! let file_id = FileId {file_id: 1};
69//! let path = template.serialize(&file_id).expect("Unable to format path");
70//! assert_eq!("directory/file_no_fffffffffffffffffffffffffffffffe.json", &path);
71//! }
72//! ```
73
74/// Template engine.
75pub mod template;
76/// Traits and structures for function execution.
77pub mod function_executor;
78/// Library of functions.
79pub mod functions;