1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//! Conversion among hini and other data exchange formats.
//!
//! ```
//! use hini_convert::convert;
//! use hini_convert::formats::DataFormat;
//!
//! let hini_data = "
//!     [section]
//!     some key = value...
//! ";
//! let json_data = convert(hini_data, DataFormat::Hini, DataFormat::Json).unwrap();
//! assert_eq!(json_data, r#"{"section":{"some key":"value..."}}"#);
//! ```

#[path = "formats.rs"] pub mod formats;

use formats::DataFormat;
use std::rc::Rc;

/// Convert the given string data between the given formats.  Errors are reported as strings.
pub fn convert(data: &str, from: DataFormat, to: DataFormat) -> Result<String, String> {
    let decoder = from.decoder();
    let encoder = to.encoder();

    let tree = decoder(data)?;
    Ok(encoder(Rc::clone(&tree)))
}