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
28
29
30
31
32
33
34
35
36
37
38
39
//! # Get - SGetter
//!
//! This module provides a mechanism for asking for anything from the lazyf format.
//! As long as it can be parsed from a string
//! -- That is anything that implements the FromStr trait.
//!
//! To implement it provide the get_s method returning a String

use std::str::FromStr;
use lz_err::LzErr;



pub trait SGetter<IT> {
    //IT = IndexType
    //RT = ResultType
    fn get_s(&self,s:IT)->Option<String>;
    
    fn get_s_def(&self,s:IT,def:&str)->String{
        self.get_s(s).unwrap_or(def.to_string()) 
    }

    fn get_t<RT:FromStr>(&self,s:IT)->Result<RT,LzErr>{
        match self.get_s(s) {
            Some(r)=>{
                match r.parse::<RT>(){
                    Ok(res)=>Ok(res),
                    Err(_)=>Err(LzErr::NoParse(r.to_string())),
                }
            }
            None=>Err(LzErr::NotFound),
        }
    }

    fn get_t_def<RT:FromStr>(&self,s:IT,def:RT)->RT{
        self.get_t(s).unwrap_or(def)
    }
    
}