extern crate trees;
extern crate reflection;
extern crate serde;
pub mod ser;
pub use self::ser::{Serializer,to_string};
pub mod de;
pub use self::de::{Deserializer,from_str};
pub mod error;
pub use error::{Error,Result};
pub(crate) use error::ErrorCode;
mod table;
#[cfg(test)]
#[macro_use]
extern crate reflection_derive;
#[cfg(test)]
#[macro_use]
extern crate serde_derive;
const RESERVED_CHAR: [char;3] = [ '\\', '\t', '\n' ];
pub struct Config {
with_header : bool,
unit_str : String,
true_str : String,
false_str : String,
}
impl Config {
pub fn make_config(
with_header : bool,
unit_str : String,
true_str : String,
false_str : String
) -> Result<Self>
{
if true_str == false_str || unit_str.is_empty() || true_str.is_empty() || false_str.is_empty() {
return Err( Error::new( ErrorCode::InvalidConfig, 0, 0 ));
} else {
for i in 0..3 {
if unit_str.find( RESERVED_CHAR[i] ).is_some()
|| true_str.find( RESERVED_CHAR[i] ).is_some()
|| false_str.find( RESERVED_CHAR[i] ).is_some()
{
return Err( Error::new( ErrorCode::InvalidConfig, 0, 0 ));
}
}
}
Ok( Config{ with_header, unit_str, true_str, false_str })
}
}
impl Default for Config {
fn default() -> Self {
Config {
with_header : true,
unit_str : "-".to_string(),
true_str : "O".to_string(),
false_str : "X".to_string(),
}
}
}
pub struct Env {
config : Config,
escapes : Vec<String>,
}
impl Env {
pub fn make_env(
with_header : bool,
unit_str : String,
true_str : String,
false_str : String
) -> Result<Self>
{
let config = Config::make_config( with_header, unit_str, true_str, false_str )?;
let escapes = vec![ String::new() ];
Ok( Env{ config, escapes })
}
}
impl Default for Env {
fn default() -> Self {
Env{ config: Config::default(), escapes: vec![ String::new() ]}
}
}
pub mod fs {
use std::fs::File;
use std::io::Read;
pub fn read_file( name: &'static str ) -> ::std::io::Result<String> {
let mut file = File::open( name )?;
let mut contents = String::new();
file.read_to_string( &mut contents )?;
contents.pop(); Ok( contents )
}
}