use chumsky::prelude::*;
use crate::{parsers::some_whitespace, traits::Parsable};
#[derive(PartialEq, Eq, Copy, Clone, Debug, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Clouds {
NoCloudDetected,
NoSignificantCloud,
CloudLayers,
}
impl Parsable for Clouds {
fn parser<'src>() -> impl Parser<'src, &'src str, Self, extra::Err<crate::MetarError<'src>>> {
choice((
just("NCD")
.map(|_| Clouds::NoCloudDetected)
.then_ignore(some_whitespace()),
just("NSC")
.map(|_| Clouds::NoSignificantCloud)
.then_ignore(some_whitespace()),
just("CLR")
.map(|_| Clouds::NoCloudDetected)
.then_ignore(some_whitespace()),
empty().map(|()| Clouds::CloudLayers),
))
}
}