1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
mod de;

pub use de::{AdvisorReviewId, AdvisorReviewRow, VeteranAdvisorId, VeteranRankingRow};
use serde::{Deserialize, Deserializer};

pub enum ProposalStatus {
    Approved,
    NotApproved,
}

#[derive(Deserialize)]
pub struct ApprovedProposalRow {
    #[serde(rename(deserialize = "internal_id"))]
    pub proposal_id: String,
    #[serde(rename(deserialize = "meets_approval_threshold"))]
    pub status: ProposalStatus,
    pub requested_dollars: String,
}

impl<'de> Deserialize<'de> for ProposalStatus {
    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
    where
        D: Deserializer<'de>,
    {
        let status: String = String::deserialize(deserializer)?;
        Ok(match status.to_lowercase().as_ref() {
            "yes" => ProposalStatus::Approved,
            _ => ProposalStatus::NotApproved,
        })
    }
}