Thanks to visit codestin.com
Credit goes to lib.rs

1 unstable release

Uses new Rust 2024

0.1.0 Sep 16, 2025

#960 in Web programming

MIT license

65KB
817 lines

nhl_data

This crate provides convenient access to the NHL API for applications written within Rust. To my knowledge the previous api

"https://statsapi.web.nhl.com/" 

has become obsolete and now

"https://api-web.nhle.com/"

is in use. The currently available crates for NHL statistics all seem to use the former. As part of learning Rust I though this would be a good small scale project to test myself on what is within the rust-book. The project is almost a 1 to 1 of Zmalski's nhl api reference guide so thanks to him for documenting all of this. There is some stuff missing from this guide, namely: networking info, stream info and playoff info.

Issues

Currently I do not handle errors, this is the next thing for me to implement. Just try not to call functions with incorrect parameters :)

Design Goals

  • Simple: Offer easy use for the user
  • Understandable: As this was a learning project I wanted others to be able to understand how the program is structured

Installation

To add to project

cargo add nhl_data

Usage

use nhl_data::Puck;

    #[tokio::main]
    async fn main() {
        let client = Puck::new();
        let mc_david = "8478402";
        let result = client.get_player_career_stats(mc_david).await;
        assert!(result.is_ok());
        let result = result.unwrap();
        let v = result.get("awards").unwrap();
        if let Some(awards) = v.as_array() {
        for award in awards {
            // Get the trophy name
            if let Some(trophy) = award.get("trophy")
                                       .and_then(|t| t.get("default"))
                                       .and_then(|t| t.as_str()) {
                println!("🏆 {}", trophy);
            }

            // Get the seasons list
            if let Some(seasons) = award.get("seasons").and_then(|s| s.as_array()) {
                for season in seasons {
                    if let Some(season_id) = season.get("seasonId").and_then(|id| id.as_u64()) {
                        println!("   Season: {}", season_id);
                    }
                }
            }
        }
    }      
    }

License

MIT

Dependencies

~7–22MB
~241K SLoC