22 releases

new 0.8.2 Oct 30, 2024
0.8.1 Oct 30, 2024
0.7.0 Oct 28, 2024
0.6.18 Nov 27, 2023
0.5.6 Aug 12, 2022

#264 in Date and time

Download history 45/week @ 2024-07-13 20/week @ 2024-07-20 48/week @ 2024-07-27 41/week @ 2024-08-03 32/week @ 2024-08-10 33/week @ 2024-08-17 60/week @ 2024-08-24 69/week @ 2024-08-31 134/week @ 2024-09-07 128/week @ 2024-09-14 106/week @ 2024-09-21 155/week @ 2024-09-28 127/week @ 2024-10-05 111/week @ 2024-10-12 99/week @ 2024-10-19 622/week @ 2024-10-26

981 downloads per month
Used in opening-hours

MIT/Apache

28KB
271 lines

Compact representation for a calendar

This modules basically builds a data-structure for a set of days based on bit-maps. This is built to store a collection of regional holidays for the opening-hours crate.

Data layout

Here is how serialized data is represented:

 start   size       year 1          year 2      ...
┌──────┬──────┬───────────────┬───────────────┬────
│  8B  │  8B  │ 8B * 12 = 96B │ 8B * 12 = 96B │ ...
└──────┴──────┴───────────────┴───────────────┴────

Each year is just an array of 12 u32 where the least significant bits each represent a day.

While a bitset might not be the most efficient way to store a collection of dates for sparse data, this approached proved to be very compact when combined with a Zlib encoder. This methods allowed to store all holidays from 2000 to 2100 as described by workalendar in only 60kb of data.

"Root Package"


"Root Package"


"Documentation"


"Workalendar Python Package"

Dependencies

~1MB
~18K SLoC