forensic-rs 0.13.1

A Rust-based framework to build tools that analyze forensic artifacts and can be reused as libraries across multiple projects without changing anything.
Documentation
use crate::utils::time::Filetime;

use super::{Field, Text, Ip};


#[derive(Debug, Clone, Default)]
pub enum PreStoredField<T> {
    Invalid,
    #[default]
    None,
    Some(T)
}

#[derive(Clone, Default)]
pub struct InternalField {
    pub original : Field,
    pub array : Box<PreStoredField<Vec<Text>>>,
    pub text : Box<PreStoredField<Text>>,
    pub nu64 : Box<PreStoredField<u64>>,
    pub ni64 : Box<PreStoredField<i64>>,
    pub date : Box<PreStoredField<Filetime>>,
    pub nf64 : Box<PreStoredField<f64>>,
    pub ip : Box<PreStoredField<Ip>>
}

impl InternalField {
    pub fn new(field : Field) -> Self {
        field.into()
    }
}
impl std::fmt::Debug for InternalField {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        f.write_fmt(format_args!("{:?}", self.original))
    }
}
impl Into<InternalField> for Field{
    fn into(self) -> InternalField {
        let mut ifield = InternalField {
            original : self,
            ..Default::default()
        };
        match &ifield.original {
            Field::F64(v) => {
                ifield.nf64 = Box::new(PreStoredField::Some(*v));
            },
            Field::I64(v) => {
                ifield.ni64 = Box::new(PreStoredField::Some(*v));
            },
            Field::Date(v) => {
                ifield.date = Box::new(PreStoredField::Some(*v));
            },
            Field::U64(v) => {
                ifield.nu64 = Box::new(PreStoredField::Some(*v));
            },
            Field::Ip(v) => {
                ifield.ip = Box::new(PreStoredField::Some(*v));
            },
            _ => {}
        }
        ifield
    }
}