Skip to content

Commit c8ba7cf

Browse files
committed
Move time provider to its own module
1 parent 336f00f commit c8ba7cf

File tree

2 files changed

+66
-62
lines changed

2 files changed

+66
-62
lines changed

examples/fat/src/fat/lib.rs

Lines changed: 6 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1+
mod time_provider;
2+
3+
use crate::time_provider::InternetComputerTimeProvider;
14
use ic_cdk_macros::{query, update};
2-
use std::convert::TryInto;
35
use std::io::{Read, Write};
46

7+
#[cfg(target_arch = "wasm32")]
8+
use std::convert::TryInto;
9+
510
// type FileSystem = fatfs::FileSystem<
611
// fatfs::StdIoWrapper<fscommon::BufStream<icfs::StableMemory>>,
712
// InternetComputerTimeProvider,
@@ -109,64 +114,3 @@ fn _write_file(filename: String, contents: String) -> std::io::Result<()> {
109114
Ok(())
110115
})
111116
}
112-
113-
// TODO: move to own module
114-
115-
#[derive(Debug, Clone, Copy, Default)]
116-
pub struct InternetComputerTimeProvider {
117-
_dummy: (),
118-
}
119-
120-
impl InternetComputerTimeProvider {
121-
#[must_use]
122-
pub fn new() -> Self {
123-
Self { _dummy: () }
124-
}
125-
}
126-
127-
impl fatfs::TimeProvider for InternetComputerTimeProvider {
128-
fn get_current_date(&self) -> fatfs::Date {
129-
self.get_current_date_time().date
130-
}
131-
132-
fn get_current_date_time(&self) -> fatfs::DateTime {
133-
let ns = time::Duration::nanoseconds(ic_cdk::api::time() as i64);
134-
135-
let epoch = time::PrimitiveDateTime::new(
136-
time::Date::from_calendar_date(1970, time::Month::January, 1).unwrap(),
137-
time::Time::from_hms(0, 0, 0).unwrap(),
138-
);
139-
140-
let datetime = epoch.checked_add(ns).unwrap();
141-
142-
// NOTE: fatfs only supports years in the range [1980, 2107]
143-
let year: u16 = datetime.year().try_into().unwrap();
144-
145-
let month = match datetime.month() {
146-
time::Month::January => 1,
147-
time::Month::February => 2,
148-
time::Month::March => 3,
149-
time::Month::April => 4,
150-
time::Month::May => 5,
151-
time::Month::June => 6,
152-
time::Month::July => 7,
153-
time::Month::August => 8,
154-
time::Month::September => 9,
155-
time::Month::October => 10,
156-
time::Month::November => 11,
157-
time::Month::December => 12,
158-
};
159-
160-
let day = datetime.day() as u16;
161-
162-
let hour = datetime.hour() as u16;
163-
let min = datetime.minute() as u16;
164-
let sec = datetime.second() as u16;
165-
let millis = datetime.millisecond() as u16;
166-
167-
fatfs::DateTime::new(
168-
fatfs::Date::new(year, month, day),
169-
fatfs::Time::new(hour, min, sec, millis),
170-
)
171-
}
172-
}

examples/fat/src/fat/time_provider.rs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
use std::convert::TryInto;
2+
3+
#[derive(Debug, Clone, Copy, Default)]
4+
pub struct InternetComputerTimeProvider {
5+
_dummy: (),
6+
}
7+
8+
impl InternetComputerTimeProvider {
9+
#[must_use]
10+
pub fn new() -> Self {
11+
Self { _dummy: () }
12+
}
13+
}
14+
15+
impl fatfs::TimeProvider for InternetComputerTimeProvider {
16+
fn get_current_date(&self) -> fatfs::Date {
17+
self.get_current_date_time().date
18+
}
19+
20+
fn get_current_date_time(&self) -> fatfs::DateTime {
21+
let ns = time::Duration::nanoseconds(ic_cdk::api::time() as i64);
22+
23+
let epoch = time::PrimitiveDateTime::new(
24+
time::Date::from_calendar_date(1970, time::Month::January, 1).unwrap(),
25+
time::Time::from_hms(0, 0, 0).unwrap(),
26+
);
27+
28+
let datetime = epoch.checked_add(ns).unwrap();
29+
30+
// NOTE: fatfs only supports years in the range [1980, 2107]
31+
let year: u16 = datetime.year().try_into().unwrap();
32+
33+
let month = match datetime.month() {
34+
time::Month::January => 1,
35+
time::Month::February => 2,
36+
time::Month::March => 3,
37+
time::Month::April => 4,
38+
time::Month::May => 5,
39+
time::Month::June => 6,
40+
time::Month::July => 7,
41+
time::Month::August => 8,
42+
time::Month::September => 9,
43+
time::Month::October => 10,
44+
time::Month::November => 11,
45+
time::Month::December => 12,
46+
};
47+
48+
let day = datetime.day() as u16;
49+
50+
let hour = datetime.hour() as u16;
51+
let min = datetime.minute() as u16;
52+
let sec = datetime.second() as u16;
53+
let millis = datetime.millisecond() as u16;
54+
55+
fatfs::DateTime::new(
56+
fatfs::Date::new(year, month, day),
57+
fatfs::Time::new(hour, min, sec, millis),
58+
)
59+
}
60+
}

0 commit comments

Comments
 (0)