use std::fmt;
use std::io;
use std::num;
use std::collections::HashSet;
use crate::dynamic_scheme::error::DynamicSchemeError;
use crate::lexer::lexer_error::LexerError;
use crate::serializator::error::SerializationError;
use crate::static_scheme::error::StaticSchemeError;
pub type SchemeResult<T> = Result<T, SchemeError>;
#[derive(Debug)]
pub enum SchemeError
{
Io(io::Error),
LexerErr(LexerError),
SerderJsonErr(serde_json::Error),
SedreJson(serde_json::error::Error),
Utf8Error(std::str::Utf8Error),
ParseIntErr(num::ParseIntError),
SchmStaticErr(StaticSchemeError),
SchmDynamicErr(DynamicSchemeError),
SchmSerialsErr(SerializationError),
}
impl fmt::Display for SchemeError
{
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result
{
match *self
{
Self::Io(ref err) => err.fmt(f),
Self::LexerErr(ref err) => err.fmt(f),
Self::SerderJsonErr(ref err) => err.fmt(f),
Self::SedreJson(ref err) => err.fmt(f),
Self::Utf8Error(ref err) => err.fmt(f),
Self::ParseIntErr(ref err) => err.fmt(f),
Self::SchmStaticErr(ref err) => err.fmt(f),
Self::SchmDynamicErr(ref err) => err.fmt(f),
Self::SchmSerialsErr(ref err) => err.fmt(f),
}
}
}
impl From<io::Error> for SchemeError
{
fn from(err: io::Error) -> SchemeError
{
SchemeError::Io(err)
}
}
impl From<LexerError> for SchemeError
{
fn from(err: LexerError) -> SchemeError
{
SchemeError::LexerErr(err)
}
}
impl From<serde_json::Error> for SchemeError
{
fn from(err: serde_json::Error) -> SchemeError
{
SchemeError::SerderJsonErr(err)
}
}
impl From<std::str::Utf8Error> for SchemeError
{
fn from(err: std::str::Utf8Error) -> SchemeError
{
SchemeError::Utf8Error(err)
}
}
impl From<num::ParseIntError> for SchemeError
{
fn from(err: num::ParseIntError) -> SchemeError
{
SchemeError::ParseIntErr(err)
}
}
impl From<StaticSchemeError> for SchemeError
{
fn from(err: StaticSchemeError) -> SchemeError
{
SchemeError::SchmStaticErr(err)
}
}
impl From<DynamicSchemeError> for SchemeError
{
fn from(err: DynamicSchemeError) -> SchemeError
{
SchemeError::SchmDynamicErr(err)
}
}
impl From<SerializationError> for SchemeError
{
fn from(err: SerializationError) -> SchemeError
{
SchemeError::SchmSerialsErr(err)
}
}
pub
fn convert_list<T: fmt::Display>(extr: &[T]) -> String
{
let recs: Vec<String> = extr.iter().map(|v| format!("{}", v)).collect();
return recs.join(" ");
}
pub
fn convert_hashset<T: fmt::Display>(extr: &HashSet<T>, sep: &str) -> String
{
let recs: Vec<String> = extr.iter().map(|v| format!("{}", v)).collect();
return recs.join(sep);
}