rocket_launch_live

Crates.iorocket_launch_live
lib.rsrocket_launch_live
version0.1.3
sourcesrc
created_at2023-09-24 20:58:06.296919
updated_at2023-09-26 19:03:51.981884
descriptionA type safe and asynchronous wrapper around the RocketLaunch.Live API.
homepage
repositoryhttps://github.com/vascocosta/rocket_launch_live/
max_upload_size
id982174
size75,242
Vasco Costa (vascocosta)

documentation

README

Rocket Launch Live

A type safe and asynchronous wrapper around the RocketLaunch.Live API.

rocket_launch_live allows you to easily integrate your code asynchronously with the RocketLaunch.Live API. Instead of dealing with low level details, the user can instanciate a client with a valid API key and use a high level interface to this service.

Design

RocketLaunchLive is the main struct, containing methods for each endpoint. The JSON data is deserialised into meaningful model types defined in the api_models module. Each call to an endpoint method returns a Response<T> which is generic over T, allowing tailored responses. Depending on which method you call, the response contains a result field of type Vec<T> where T can be of the type api_models::Company, api_models::Launch, api_models::Location, api_models::Mission, api_models::Pad, api_models::Tag or api_models::Vehicle.

This REST API provides access to a growing database of curated rocket launch data through the following endpoints:

  • Companies
  • Launches
  • Locations
  • Missions
  • Pads
  • Tags
  • Vehicles

Examples

use rocket_launch_live::api_models::{Launch, Response};
use rocket_launch_live::{Direction, LaunchParamsBuilder, NaiveDate, RocketLaunchLive};
use std::{env, error::Error};

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    // Read the API key from an environment variable.
    let api_key = env::var("RLL_API_KEY")?;

    // Create an instance of RocketLaunchLive to access the API.
    let client = RocketLaunchLive::new(&api_key);

    // Create an instance of LaunchParamsBuilder.
    // Set some parameters to filter out the launches we're interested in.
    let params = LaunchParamsBuilder::new()
        .country_code("US")
        .after_date(NaiveDate::from_ymd_opt(2023, 9, 1))?
        .search("ISS")
        .direction(Direction::Descending)
        .limit(10)
        .build();

    // Call the launches endpoint method with the parameters set above.
    // This returns a Response from the API server asynchronously.
    // Generic type annotations since each endpoint has a specific response.
    let resp: Response<Launch> = client.launches(Some(params)).await?;

    // Iterate over the the result field of the Response.
    for launch in resp.result {
        println!(
            "{} | {} | {}",
            launch.date_str, launch.vehicle.name, launch.name
        );
    }

    Ok(())
}
Commit count: 5

cargo fmt