planetsfactory 0.0.4

Planet factory — classify, build and catalogue planets for any star system: Solar System, TRAPPIST-1, Kepler-90, Proxima Centauri, or fully custom worlds.
Documentation
use planetsfactory::config::parameters::*;
use planetsfactory::engine::generator::{
    GeneratedPlanet, SystemGeneratorConfig, generate_rogue_planets, generate_system,
};

use std::process;

fn planet_mass(p: &GeneratedPlanet) -> f64 {
    match p {
        GeneratedPlanet::Terrestrial(t) => t.mass,
        GeneratedPlanet::SuperEarth(se) => se.mass,
        GeneratedPlanet::SubNeptune(sn) => sn.mass,
        GeneratedPlanet::IceGiant(ig) => ig.mass,
        GeneratedPlanet::GasGiant(gg) => gg.mass,
        GeneratedPlanet::LavaWorld(lw) => lw.mass,
        GeneratedPlanet::OceanWorld(ow) => ow.mass,
        GeneratedPlanet::Rogue(rp) => rp.mass,
    }
}

fn planet_radius(p: &GeneratedPlanet) -> f64 {
    match p {
        GeneratedPlanet::Terrestrial(t) => t.radius,
        GeneratedPlanet::SuperEarth(se) => se.radius,
        GeneratedPlanet::SubNeptune(sn) => sn.radius,
        GeneratedPlanet::IceGiant(ig) => ig.radius,
        GeneratedPlanet::GasGiant(gg) => gg.radius,
        GeneratedPlanet::LavaWorld(lw) => lw.radius,
        GeneratedPlanet::OceanWorld(ow) => ow.radius,
        GeneratedPlanet::Rogue(rp) => rp.radius,
    }
}

fn main() {
    let solar_config = SystemGeneratorConfig::solar_like(8);
    let system = generate_system(&solar_config);

    let m_dwarf_config = SystemGeneratorConfig::m_dwarf(5);
    let m_dwarf_system = generate_system(&m_dwarf_config);

    let rogues = generate_rogue_planets(3, 99);

    let mut total_mass = 0.0;
    let mut max_radius = 0.0_f64;
    for p in &system {
        total_mass += planet_mass(p);
        max_radius = max_radius.max(planet_radius(p));
    }

    let mut m_dwarf_mass = 0.0;
    for p in &m_dwarf_system {
        m_dwarf_mass += planet_mass(p);
    }

    let mut rogue_total = 0.0;
    for p in &rogues {
        rogue_total += planet_mass(p);
    }

    let ok = system.len() == 8
        && m_dwarf_system.len() == 5
        && rogues.len() == 3
        && total_mass > 0.0
        && max_radius > EARTH_RADIUS
        && m_dwarf_mass > 0.0
        && rogue_total > 0.0;

    if ok {
        process::exit(0);
    } else {
        process::exit(1);
    }
}