tzf-rs: a fast timezone finder for Rust. Rust Documentation codecov

Build options

By default, the binary is built as well. If you don't want/need it, then build like this:

bash cargo build --no-default-features

Or add in the below way:

bash cargo add tzf-rs --no-default-features

Best practice

It's expensive to init tzf-rs's Finder/FuzzyFinder/DefaultFinder, please consider reuse it or as a global var. Below is a global var example:

```rust use lazystatic::lazystatic; use tzf_rs::DefaultFinder;

lazy_static! { static ref FINDER: DefaultFinder = DefaultFinder::new(); }

fn main() { print!("{:?}\n", FINDER.gettzname(116.3883, 39.9289)); print!("{:?}\n", FINDER.gettznames(116.3883, 39.9289)); } ```

For reuse it, racemap/rust-tz-service is a good example.

A Redis protocol demo could be used here: redizone.

Performance

The tzf-rs package is intended for high-performance geo spatial query services, such as weather forecasting APIs. Most queries can be returned within a very short time, averaging around 3000 nanoseconds(there is 1000ns slower compared with Go repo tzf and I will continue to improve that, you can track progress here).

Here is what has been done to improve performance:

  1. Using pre-indexing to handle most queries takes approximately 1000 nanoseconds.
  2. Using a finely-tuned Ray Casting algorithm package https://github.com/ringsaturn/geometry-rs to verify whether a polygon contains a point.

That's all. There are no black magic tricks inside the tzf-rs.

Below is a benchmark run on global cities(about 14K), and avg time is about 3000 ns per query:

test benches_default::bench_default_finder_random_city ... bench: 2,870 ns/iter (+/- 182)

| Criterion result | Pic | | ---------------- | -------------------------------- | | PDF | | | Regression | |

You can view more details from latest benchmark from GitHub Actions logs.

References

I have written an article about the history of tzf, its Rust port, and its Rust port's Python binding; you can view it here.

Bindings

LICENSE

This project is licensed under the MIT license. The data is licensed under the ODbL license, same as evansiroky/timezone-boundary-builder