ephemeris_forge/access/
observed.rs1use std::fmt;
2use std::str::FromStr;
3
4#[derive(Clone, Debug, Eq, PartialEq)]
6pub enum Observed<P> {
7 Known(P),
9 Unknown(String),
11}
12
13impl<P: FromStr> Observed<P> {
14 #[must_use]
16 pub fn parse(raw: &str) -> Self {
17 raw.parse()
18 .map_or_else(|_unknown| Self::Unknown(raw.to_owned()), Self::Known)
19 }
20}
21
22impl<P: PartialEq> PartialEq<P> for Observed<P> {
23 fn eq(&self, other: &P) -> bool {
24 matches!(self, Self::Known(known) if known == other)
25 }
26}
27
28impl<P: fmt::Display> fmt::Display for Observed<P> {
29 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
30 match self {
31 Self::Known(known) => known.fmt(f),
32 Self::Unknown(raw) => raw.fmt(f),
33 }
34 }
35}