dzn_rs/
lib.rs

1//! A DZN file is represented in the [`DataFile`] struct. It can be parsed from a source with the
2//! [`parse`] function.
3//!
4//! # Example
5//! ```
6//! let source = r#"
7//! int_param = 5;
8//! bool_param = true;
9//! array_1d = [1, 3, 5];
10//! array_2d = [| true, false
11//!             | false, true
12//!             | false, false |];
13//! "#;
14//!
15//! let data_file = dzn_rs::parse::<i32>(source.as_bytes()).expect("valid dzn");
16//!
17//! assert_eq!(Some(&5), data_file.get::<i32>("int_param"));
18//! assert_eq!(Some(&true), data_file.get::<bool>("bool_param"));
19//!
20//! let array_1d = data_file.array_1d::<i32>("array_1d", 3)
21//!     .expect("key exists with requested length");
22//! assert_eq!(&[3], array_1d.shape());
23//! for (idx, value) in [1, 3, 5].iter().enumerate() {
24//!     assert_eq!(Some(value), array_1d.get([idx]));
25//! }
26//!
27//! let array_2d = data_file.array_2d::<bool>("array_2d", [3, 2])
28//!     .expect("key exists with requested shape");
29//! assert_eq!(&[3, 2], array_2d.shape());
30//!
31//! dbg!(&array_2d);
32//! assert_eq!(Some(&true), array_2d.get([0, 0]));
33//! assert_eq!(Some(&false), array_2d.get([0, 1]));
34//! assert_eq!(Some(&false), array_2d.get([1, 0]));
35//! assert_eq!(Some(&true), array_2d.get([1, 1]));
36//! assert_eq!(Some(&false), array_2d.get([2, 0]));
37//! assert_eq!(Some(&false), array_2d.get([2, 1]));
38//! ```
39
40mod ast;
41mod error;
42mod numbers;
43mod parser;
44mod value;
45
46pub use ast::*;
47pub use error::*;
48pub use parser::*;
49pub use value::*;