6 releases

0.1.7 Oct 6, 2022
0.1.6 Oct 3, 2022
0.1.1 Sep 30, 2022

#1708 in Asynchronous

25 downloads per month

MIT license

27KB
426 lines

Holiday API Rust Library

License Test Status Crates.io wakatime

Unofficial library for Holiday API written in Rust. This repo implements interface for original HolidayAPI endpoints seen here.

Acknowledgments

This project is heavily inspired by holidayapi-node and holiday-api-rust repositories.

Installation

Add the following to your Cargo.toml

[dependencies]
holidayapi_rust = "0.1.7"

Or use cargo cli:

$ cargo add holidayapi_rust

Usage

Basic

use holidayapi_rust::prelude::*;

let holiday_api = HolidayAPI::new("00000000-0000-0000-0000-000000000000").unwrap();

async fn main() {
	// Fetch supported countries and subdivisions
	let countries: Vec<Country> = holiday_api.countries().get().await.unwrap();

	// Fetch supported languages
	let languages: Vec<Language> = holiday_api.languages().get().await.unwrap();

	// Fetch holidays with minimum parameters
	let holidays: Vec<Holiday> = holiday_api.holidays("US", 2020).get().await.unwrap();
}

Builder pattern

use holidayapi_rust::prelude::*;

let holiday_api = HolidayAPI::new(VALID_KEY).unwrap();

// Holidays
let specific_request: Vec<Holiday> = holiday_api
	.holidays("jp", 2021)
	.pretty(true)
	.language("cn")
	.public(true)
	.get()
	.await; 

// Countries
let specific_request: Vec<Country> = holiday_api
	.countries()
	.search("hello world")
	.country("US")
	.public(true)
	.get()
	.await
	.unwrap();

// Languages
let specific_request: Vec<Language> = holiday_api
	.languages()
	.search("chinese")
	.pretty(true)
	.get()
	.await
	.unwrap();

Future ideas

  • Refactor async call using IntoFuture to remove unnecessary .get() calls.
  • Implements memoization for api calls.
  • Add new utility functions on top of raw API.

Dependencies

~8–21MB
~301K SLoC