atuin/atuin-client/src/history/builder.rs
Conrad Ludgate f90c01f702
replace chrono with time ()
* replace chrono with time

* Fix test chrono usage

---------

Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
2023-09-11 09:26:05 +01:00

99 lines
2.6 KiB
Rust

use typed_builder::TypedBuilder;
use super::History;
/// Builder for a history entry that is imported from shell history.
///
/// The only two required fields are `timestamp` and `command`.
#[derive(Debug, Clone, TypedBuilder)]
pub struct HistoryImported {
timestamp: time::OffsetDateTime,
#[builder(setter(into))]
command: String,
#[builder(default = "unknown".into(), setter(into))]
cwd: String,
#[builder(default = -1)]
exit: i64,
#[builder(default = -1)]
duration: i64,
#[builder(default, setter(strip_option, into))]
session: Option<String>,
#[builder(default, setter(strip_option, into))]
hostname: Option<String>,
}
impl From<HistoryImported> for History {
fn from(imported: HistoryImported) -> Self {
History::new(
imported.timestamp,
imported.command,
imported.cwd,
imported.exit,
imported.duration,
imported.session,
imported.hostname,
None,
)
}
}
/// Builder for a history entry that is captured via hook.
///
/// This builder is used only at the `start` step of the hook,
/// so it doesn't have any fields which are known only after
/// the command is finished, such as `exit` or `duration`.
#[derive(Debug, Clone, TypedBuilder)]
pub struct HistoryCaptured {
timestamp: time::OffsetDateTime,
#[builder(setter(into))]
command: String,
#[builder(setter(into))]
cwd: String,
}
impl From<HistoryCaptured> for History {
fn from(captured: HistoryCaptured) -> Self {
History::new(
captured.timestamp,
captured.command,
captured.cwd,
-1,
-1,
None,
None,
None,
)
}
}
/// Builder for a history entry that is loaded from the database.
///
/// All fields are required, as they are all present in the database.
#[derive(Debug, Clone, TypedBuilder)]
pub struct HistoryFromDb {
id: String,
timestamp: time::OffsetDateTime,
command: String,
cwd: String,
exit: i64,
duration: i64,
session: String,
hostname: String,
deleted_at: Option<time::OffsetDateTime>,
}
impl From<HistoryFromDb> for History {
fn from(from_db: HistoryFromDb) -> Self {
History {
id: from_db.id,
timestamp: from_db.timestamp,
exit: from_db.exit,
command: from_db.command,
cwd: from_db.cwd,
duration: from_db.duration,
session: from_db.session,
hostname: from_db.hostname,
deleted_at: from_db.deleted_at,
}
}
}