2个不稳定版本

使用旧的Rust 2015

0.2.0 2018年9月5日
0.1.0 2018年8月28日

#3#spacex

MIT/Apache

54KB
1K SLoC

space-rx

Crates.io Documentation

Rust对非官方SpaceX API的封装(可以在这里找到)。

文档

安装

将以下内容添加到您的 Cargo.toml 文件中

[dependencies]
space_rx = "0.2"

概述

此crate提供了对非官方SpaceX API中所有可用端点的易于使用的请求构建器。这些请求构建器在发送后会返回一个模型,这反过来又为您提供了对每个端点暴露的所有字段的类型安全、Rust式的访问。

示例

以下是一个示例,我们在v2/rockets/{rocket_id}端点进行请求 - 我们在请求构建器中将rocket_id指定为一个字段。

extern crate space_rx;

use space_rx::v2_api::requests::rocket::*;

fn main() {
    let req = RocketRequestBuilder::default().rocket_id("falcon9").build().unwrap();
    let rocket = space_rx::send(&req).unwrap();

    println!("The Falcon 9 weighs {:?}lbs.  Wow!", rocket.mass.lb);
    println!("The Falcon 9's landing legs are made out of {:?}.", rocket.landing_legs.material.unwrap());
    println!("The Falcon 9's {:?} engine(s) use {:?} and {:?} as propellant.", rocket.engines.number, rocket.engines.propellant_1, rocket.engines.propellant_2);
}

星舟的情况如何?让我们看看!

extern crate space_rx;

use space_rx::v2_api::requests::info::*;

fn main() {
    let req = RoadsterInfoRequestBuilder::default().build().unwrap();
    let roadster_info = space_rx::send(&req).unwrap();

    println!("Here's how Starman is doing: {:?}", roadster_info);
}

具有launch风格的端点有很多潜在参数可以过滤请求。让我们尝试一些。

extern crate space_rx;

use space_rx::SortDir;
use space_rx::v2_api::requests::launch::*;

fn main() {
    let req = AllLaunchesRequestBuilder::default().reused(true)
                                                  .start("2010-06-22")
                                                  .customer("Telkom")
                                                  .site_name("CCAFS SLC 40")
                                                  .order(SortDir::DESC)
                                                  .build()
                                                  .unwrap();
    
    let launches = space_rx::send(&req).unwrap();

    println!("{:?}", launches);
}

然后我们得到了一些关于Dragon 1胶囊的信息。

extern crate space_rx;

use space_rx::v2_api::requests::capsule::*;

fn main() {
    let req = CapsuleRequestBuilder::default().capsule_id("dragon1").build().unwrap();
    let capsule = space_rx::send(&req).unwrap();

    println!("The Dragon 1 capsule can hold {:?} people.", capsule.crew_capacity);
    println!("How much junk does the Dragon 1 capsule have in the trunk?  Well, this much: {:?}.", capsule.trunk);
}

对SpaceX使用的发射台感兴趣吗?我们可以尝试一下。

extern crate space_rx;

use space_rx::v2_api::requests::launchpad::*;

fn main() {
    let req = LaunchpadRequestBuilder::default().launchpad_id("ksc_lc_39a").build().unwrap();
    let kennedy_space_center_39a_launchpad = space_rx::send(&req).unwrap();

    println!("{:?} has launched these rockets: {:?}.", kennedy_space_center_39a_launchpad.full_name, kennedy_space_center_39a_launchpad.vehicles_launched);
    println!("{:?} is located at {:?}.", kennedy_space_center_39a_launchpad.full_name, kennedy_space_center_39a_launchpad.location);
}

所有胶囊中使用的部件是什么?我们也可以找到这一点。

extern crate space_rx;

use space_rx::v2_api::requests::part::*;

fn main() {
    let req = AllCapsulePartsRequestBuilder::default().build().unwrap();
    let capsule_parts = space_rx::send(&req).unwrap();

    println!("Here are the parts used in SpaceX capsules: {:?}", capsule_parts);
}

许可

这是Apache/2或MIT许可证,根据您的选择。所有贡献也都在同一许可证下。

依赖项

~17–26MB
~459K SLoC