nullnet-firewall 0.2.2

Rust-based firewall for network drivers
Documentation
use std::fmt::{Display, Formatter};
use std::str::FromStr;

use chrono::{DateTime, Local};
use rusqlite::types::{FromSql, FromSqlResult, ToSqlOutput, ValueRef};
use rusqlite::ToSql;

#[derive(PartialEq, Debug, Clone)]
pub(crate) struct LogTimestamp {
    timestamp: DateTime<Local>,
}

impl LogTimestamp {
    pub(crate) fn from_date_time(date_time: DateTime<Local>) -> LogTimestamp {
        LogTimestamp {
            timestamp: date_time,
        }
    }
}

impl ToSql for LogTimestamp {
    fn to_sql(&self) -> rusqlite::Result<ToSqlOutput<'_>> {
        Ok(self.to_string().into())
    }
}

impl FromSql for LogTimestamp {
    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self> {
        FromSqlResult::Ok(LogTimestamp {
            timestamp: DateTime::from_str(value.as_str().unwrap()).unwrap(),
        })
    }
}

impl Display for LogTimestamp {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        write!(f, "{}", self.timestamp)
    }
}

#[cfg(test)]
mod tests {
    use rusqlite::types::ToSqlOutput;
    use rusqlite::types::Value::Text;
    use rusqlite::ToSql;

    use crate::logs::log_timestamp::LogTimestamp;

    #[test]
    fn test_log_timestamp_from_date_time() {
        let time = chrono::offset::Local::now();
        assert_eq!(
            LogTimestamp::from_date_time(time),
            LogTimestamp { timestamp: time }
        );
    }

    #[test]
    fn test_log_timestamp_to_sql() {
        let time = chrono::offset::Local::now();
        assert_eq!(
            LogTimestamp::to_sql(&LogTimestamp { timestamp: time }),
            Ok(ToSqlOutput::Owned(Text(time.to_string())))
        );
    }
}