bitpill 0.3.3

A personal medication management TUI application built in Rust.
Documentation
use crate::domain::{
    entities::medication::{CreateMedication, UpdateMedication},
    value_objects::*,
};

pub struct MedicationMapper {}

impl MedicationMapper {
    pub fn from_request<T>(request: T) -> Result<CreateMedication, ApplicationError>
    where
        T: Into<crate::application::dtos::requests::CreateMedicationRequest>,
    {
        let request = request.into();
        
        let name = MedicationName::new(request.name)?;
        let dosage = Dosage::new(request.amount_mg)?;
        let times = request
            .scheduled_time
            .into_iter()
            .map(|(h, m)| ScheduledTime::new(h, m))
            .collect::<Result<Vec<_>, _>>()?;

        let dose_frequency = match request.dose_frequency.as_str() {
            "OnceDaily" => DoseFrequency::OnceDaily,
            "TwiceDaily" => DoseFrequency::TwiceDaily,
            "ThriceDaily" => DoseFrequency::ThriceDaily,
            "Custom" => DoseFrequency::Custom(times.clone()),
            _ => DoseFrequency::OnceDaily,
        };

        Ok(CreateMedication {
            id: MedicationId::generate(),
            name,
            dosage,
            scheduled_time: times,
            dose_frequency,
        })
    }
}