use std::collections::{BTreeMap, LinkedList};
use item_value::ItemValue;
use enums::Warning;
pub struct TomlData
{
pub warnings : LinkedList<Warning>,
data : BTreeMap<String, ItemValue>
}
impl TomlData
{
pub fn new(
data : BTreeMap<String, ItemValue>,
warnings : LinkedList<Warning>
) -> TomlData
{
TomlData {
warnings : warnings,
data : data
}
}
pub fn optional_duration<T:AsRef<str>>(
&self,
name : T
) -> Option<i64>
{
let name = name.as_ref();
if let Some(val) = self.data.get(&String::from(name))
{
if val.is_duration()
{
let val = val.get_i64();
info!("{} => {}", name, val);
Some(val)
}
else
{
panic!("Item {} is not an duration element.", name);
}
}
else
{
info!("{} => None", name);
None
}
}
pub fn optional_i64<T:AsRef<str>>(
&self,
name : T
) -> Option<i64>
{
let name = name.as_ref();
if let Some(val) = self.data.get(&String::from(name))
{
if val.is_i64()
{
let val = val.get_i64();
info!("{} => {}", name, val);
Some(val)
}
else
{
panic!("Item {} is not an i64 element.", name);
}
}
else
{
info!("{} => None", name);
None
}
}
pub fn optional_u16<T:AsRef<str>>(
&self,
name : T
) -> Option<u16>
{
let name = name.as_ref();
if let Some(val) = self.data.get(&String::from(name))
{
if val.is_u16()
{
let val = val.get_u16();
info!("{} => {}", name, val);
Some(val)
}
else
{
panic!("Item {} is not an u16 element.", name);
}
}
else
{
info!("{} => None", name);
None
}
}
pub fn optional_usize<T:AsRef<str>>(
&self,
name : T
) -> Option<usize>
{
let name = name.as_ref();
if let Some(val) = self.data.get(&String::from(name))
{
if val.is_usize()
{
let val = val.get_usize();
info!("{} => {}", name, val);
Some(val)
}
else
{
panic!("Item {} is not an usize element.", name);
}
}
else
{
info!("{} => None", name);
None
}
}
pub fn optional_str<'a, T:AsRef<str>>(
&'a self,
name : T
) -> Option<&'a str>
{
let name = name.as_ref();
if let Some(val) = self.data.get(&String::from(name))
{
if val.is_str()
{
let val = val.get_str();
info!("{} => [{}]", name, val);
Some(val)
}
else
{
panic!("Item {} is not an string element.", name);
}
}
else
{
info!("{} => None", name);
None
}
}
pub fn get_duration<T:AsRef<str>>(
&self,
name : T
) -> i64
{
let name = name.as_ref();
if let Some(val) = self.optional_duration(name)
{
val
}
else
{
panic!("Item {} does not exist.", name);
}
}
pub fn get_i64<T:AsRef<str>>(
&self,
name : T
) -> i64
{
let name = name.as_ref();
if let Some(val) = self.optional_i64(name)
{
val
}
else
{
panic!("Item {} does not exist.", name);
}
}
pub fn get_u16<T:AsRef<str>>(
&self,
name : T
) -> u16
{
let name = name.as_ref();
if let Some(val) = self.optional_u16(name)
{
val
}
else
{
panic!("Item {} does not exist.", name);
}
}
pub fn get_usize<T:AsRef<str>>(
&self,
name : T
) -> usize
{
let name = name.as_ref();
if let Some(val) = self.optional_usize(name)
{
val
}
else
{
panic!("Item {} does not exist.", name);
}
}
pub fn get_str<'a, T:AsRef<str>>(
&'a self,
name : T
) -> &'a str
{
let name = name.as_ref();
if let Some(val) = self.optional_str(name)
{
val
}
else
{
panic!("Item {} does not exist.", name);
}
}
}