use itertools::{put_back_n, PutBackN};
use std::str::Chars;
use super::format_field::FormatField;
use crate::cli;
pub struct FormatPrimitive {
pub prefix: Option<String>,
pub pre_decimal: Option<String>,
pub post_decimal: Option<String>,
pub suffix: Option<String>,
}
impl Default for FormatPrimitive {
fn default() -> FormatPrimitive {
FormatPrimitive {
prefix: None,
pre_decimal: None,
post_decimal: None,
suffix: None,
}
}
}
#[derive(Clone, PartialEq)]
pub enum Base {
Ten = 10,
Hex = 16,
Octal = 8,
}
pub struct InPrefix {
pub radix_in: Base,
pub sign: i8,
pub offset: usize,
}
pub trait Formatter {
fn get_primitive(
&self,
field: &FormatField,
inprefix: &InPrefix,
str_in: &str,
) -> Option<FormatPrimitive>;
fn primitive_to_str(&self, prim: &FormatPrimitive, field: FormatField) -> String;
}
pub fn get_it_at(offset: usize, str_in: &str) -> PutBackN<Chars> {
put_back_n(str_in[offset..].chars())
}
pub fn warn_incomplete_conv(pf_arg: &str) {
cli::err_msg(&format!("{}: value not completely converted", pf_arg))
}