forklaunch 1.15.0

Launch faster with forklaunch
use convert_case::{Case, Casing};
use ramhorns::Content;
use serde::{Deserialize, Serialize};

use super::{
    InitializableManifestConfig, InitializableManifestConfigMetadata, ProjectManifestConfig,
};
use crate::config_struct;

config_struct!(
    #[derive(Debug, Content, Serialize, Clone)]
    pub(crate) struct LibraryManifestData {
        #[serde(skip_serializing, skip_deserializing)]
        pub(crate) library_name: String,
        #[serde(skip_serializing, skip_deserializing)]
        pub(crate) camel_case_name: String,
        #[serde(skip_serializing, skip_deserializing)]
        pub(crate) kebab_case_name: String,
        #[serde(skip_serializing, skip_deserializing)]
        pub(crate) title_case_name: String,
        #[serde(skip_serializing, skip_deserializing)]
        pub(crate) description: String,
    }
);

impl ProjectManifestConfig for LibraryManifestData {
    fn name(&self) -> &String {
        &self.library_name
    }
    fn description(&self) -> &String {
        &self.description
    }
}

impl InitializableManifestConfig for LibraryManifestData {
    fn initialize(&self, metadata: InitializableManifestConfigMetadata) -> Self {
        let library_metadata = match metadata {
            InitializableManifestConfigMetadata::Project(library_metadata) => library_metadata,
            _ => unreachable!(),
        };
        let library_name = library_metadata.project_name.clone();
        let project_entry = self
            .projects
            .iter()
            .find(|p| p.name == library_metadata.project_name.clone())
            .unwrap();
        Self {
            library_name: library_name.clone(),
            camel_case_name: library_name.clone().to_case(Case::Camel),
            kebab_case_name: library_name.clone().to_case(Case::Kebab),
            description: library_metadata
                .description
                .clone()
                .unwrap_or(project_entry.description.clone()),
            ..self.clone()
        }
    }
}