1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use super::*;
use crate::prelude::*;
use arrow::temporal_conversions::{time64ns_to_time, NANOSECONDS};
use chrono::Timelike;
pub(crate) fn time_to_time64ns(time: &NaiveTime) -> i64 {
time.second() as i64 * NANOSECONDS + time.nanosecond() as i64
}
impl TimeChunked {
pub fn as_time_iter(&self) -> impl Iterator<Item = Option<NaiveTime>> + TrustedLen + '_ {
unsafe {
self.downcast_iter()
.flat_map(|iter| {
iter.into_iter()
.map(|opt_v| opt_v.copied().map(time64ns_to_time))
})
.trust_my_length(self.len())
}
}
pub fn from_naive_time<I: IntoIterator<Item = NaiveTime>>(name: &str, v: I) -> Self {
let vals = v
.into_iter()
.map(|nt| time_to_time64ns(&nt))
.collect::<Vec<_>>();
Int64Chunked::from_vec(name, vals).into_time()
}
pub fn from_naive_time_options<I: IntoIterator<Item = Option<NaiveTime>>>(
name: &str,
v: I,
) -> Self {
let vals = v.into_iter().map(|opt| opt.map(|nt| time_to_time64ns(&nt)));
Int64Chunked::from_iter_options(name, vals).into_time()
}
}