use std::time::Duration;
use chrono::{DateTime, Utc};
use curl::easy::Easy;
use super::easy_ext;
#[derive(Clone, Debug, PartialEq, Eq, Default)]
pub struct Timings {
pub begin_call: DateTime<Utc>,
pub end_call: DateTime<Utc>,
pub name_lookup: Duration,
pub connect: Duration,
pub app_connect: Duration,
pub pre_transfer: Duration,
pub start_transfer: Duration,
pub total: Duration,
}
impl Timings {
pub fn new(easy: &mut Easy, begin_call: DateTime<Utc>, end_call: DateTime<Utc>) -> Self {
let name_lookup = easy_ext::namelookup_time_t(easy)
.or(easy.namelookup_time())
.unwrap_or_default();
let connect = easy_ext::connect_time_t(easy)
.or(easy.connect_time())
.unwrap_or_default();
let app_connect = easy_ext::appconnect_time_t(easy)
.or(easy.appconnect_time())
.unwrap_or_default();
let pre_transfer = easy_ext::pretransfer_time_t(easy)
.or(easy.pretransfer_time())
.unwrap_or_default();
let start_transfer = easy_ext::starttransfer_time_t(easy)
.or(easy.starttransfer_time())
.unwrap_or_default();
let total = easy_ext::total_time_t(easy)
.or(easy.total_time())
.unwrap_or_default();
Timings {
begin_call,
end_call,
name_lookup,
connect,
app_connect,
pre_transfer,
start_transfer,
total,
}
}
}