25 unstable releases (4 breaking)

0.9.1 Nov 26, 2024
0.8.3 Nov 17, 2024
0.6.18 Nov 27, 2023
0.6.15 Jun 14, 2023
0.6.4 Aug 12, 2022

#272 in Date and time

Download history 34/week @ 2024-08-21 87/week @ 2024-08-28 108/week @ 2024-09-04 128/week @ 2024-09-11 125/week @ 2024-09-18 111/week @ 2024-09-25 130/week @ 2024-10-02 141/week @ 2024-10-09 110/week @ 2024-10-16 212/week @ 2024-10-23 581/week @ 2024-10-30 193/week @ 2024-11-06 420/week @ 2024-11-13 315/week @ 2024-11-20 215/week @ 2024-11-27 89/week @ 2024-12-04

1,075 downloads per month
Used in opening-hours

MIT/Apache

28KB
292 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