Skip to content

Commit 54bf77e

Browse files
authored
Merge pull request #72 from grafbase/web-time-wasm32-unknown-unknown
Enable Web/Wasm compatibility by using `web_time::SystemTime::now()`
2 parents 9bc46d0 + 05499bd commit 54bf77e

File tree

5 files changed

+19
-6
lines changed

5 files changed

+19
-6
lines changed

Cargo.toml

+4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ uuid = { version = "1.1", optional = true }
2424
postgres-types = { version = "0.2.6", optional = true }
2525
bytes = { version = "1.4.0", optional = true }
2626

27+
[target.wasm32-unknown-unknown.dependencies]
28+
getrandom = { version = "0.2", features = ["js"] }
29+
web-time = "1"
30+
2731
[dev-dependencies]
2832
bencher = "0.1"
2933
serde_derive = "1.0"

src/generator.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@ impl Generator {
4242
/// assert!(ulid1 < ulid2);
4343
/// ```
4444
pub fn generate(&mut self) -> Result<Ulid, MonotonicError> {
45-
let now = SystemTime::now();
46-
self.generate_from_datetime(now)
45+
self.generate_from_datetime(crate::time_utils::now())
4746
}
4847

4948
/// Generate a new Ulid matching the given DateTime.
@@ -91,8 +90,7 @@ impl Generator {
9190
where
9291
R: rand::Rng + ?Sized,
9392
{
94-
let now = SystemTime::now();
95-
self.generate_from_datetime_with_source(now, source)
93+
self.generate_from_datetime_with_source(crate::time_utils::now(), source)
9694
}
9795

9896
/// Generate a new monotonic increasing Ulid with the given source matching the given DateTime

src/lib.rs

+2
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ mod postgres;
4444
pub mod serde;
4545
#[cfg(feature = "std")]
4646
mod time;
47+
#[cfg(feature = "std")]
48+
mod time_utils;
4749
#[cfg(feature = "uuid")]
4850
mod uuid;
4951

src/time.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ impl Ulid {
1111
/// let my_ulid = Ulid::new();
1212
/// ```
1313
pub fn new() -> Ulid {
14-
Ulid::from_datetime(SystemTime::now())
14+
Ulid::from_datetime(crate::time_utils::now())
1515
}
1616

1717
/// Creates a new Ulid using data from the given random number generator
@@ -25,7 +25,7 @@ impl Ulid {
2525
/// let ulid = Ulid::with_source(&mut rng);
2626
/// ```
2727
pub fn with_source<R: rand::Rng>(source: &mut R) -> Ulid {
28-
Ulid::from_datetime_with_source(SystemTime::now(), source)
28+
Ulid::from_datetime_with_source(crate::time_utils::now(), source)
2929
}
3030

3131
/// Creates a new Ulid with the given datetime

src/time_utils.rs

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
pub(crate) fn now() -> std::time::SystemTime {
2+
#[cfg(target_arch = "wasm32")]
3+
{
4+
use web_time::web::SystemTimeExt;
5+
return web_time::SystemTime::now().to_std();
6+
}
7+
#[cfg(not(target_arch = "wasm32"))]
8+
return std::time::SystemTime::now();
9+
}

0 commit comments

Comments
 (0)