starstuff_types/
star.rs

1/*!
2Star structures
3 */
4
5use crate::coord::{Cartesian, Equitorial, Horizontal, Polar};
6
7/**
8Kinds of star coordinates.
9
10> TODO: simplify this enum like crate::angle::Angle
11*/
12#[derive(Debug, Copy, Clone)]
13pub enum StarCoordinates {
14    Cartesian(Cartesian),
15    Equitorial(Equitorial),
16    Horizontal(Horizontal),
17    Stereo(Polar),
18}
19
20/**
21Generic star structure.
22
23> TODO: move this to a different crate and implement `from` traits for the catalog star structs in this crate.
24 */
25#[derive(Debug, Clone)]
26pub struct Star {
27    pub coordinates: StarCoordinates,
28    pub v_mag: f64,
29    pub name: String,
30    pub harvard: u32,
31}
32
33impl From<StarCoordinates> for Cartesian {
34    fn from(coord: StarCoordinates) -> Self {
35        match coord {
36            StarCoordinates::Cartesian(coord) => coord,
37            _ => panic!("Could not convert StarCoordinates to Cartesian!"),
38        }
39    }
40}
41
42impl From<StarCoordinates> for Equitorial {
43    fn from(coord: StarCoordinates) -> Self {
44        match coord {
45            StarCoordinates::Equitorial(coord) => coord,
46            _ => panic!("Could not convert StarCoordinates to Equitorial!"),
47        }
48    }
49}
50
51impl From<StarCoordinates> for Horizontal {
52    fn from(coord: StarCoordinates) -> Self {
53        match coord {
54            StarCoordinates::Horizontal(coord) => coord,
55            _ => panic!("Could not convert StarCoordinates to Horizontal!"),
56        }
57    }
58}
59
60impl From<StarCoordinates> for Polar {
61    fn from(coord: StarCoordinates) -> Self {
62        match coord {
63            StarCoordinates::Stereo(coord) => coord,
64            _ => panic!("Could not convert StarCoordinates to Polar!"),
65        }
66    }
67}