kmmp-project-manager 0.1.0

kmmp-project-manager is a Rust crate for Kotlin Multiplatform (KMP) projects, offering a lightweight alternative to Android Studio. It provides tools for project creation, structure management, build automation, code generation, IDE integration, dependency management, and project configuration.
Documentation
use crate::{
    Repositories,
    Plugins,
};

use serde::{Serialize,Deserialize};

#[cfg(feature = "generate")]
use std::{
    fs::File,
    io::Write
};

/// Represents the configuration of the `settings.gradle` file.
#[derive(Deserialize, Serialize, Debug, PartialEq, PartialOrd )]
#[serde(bound(deserialize = "'de: 'a"))]
//TODO add project includes module block
pub struct SettingsGradle<'a> {
    /// The list of plugins.
    pub plugins : Plugins<'a>,
    /// The plugin repositories.
    pub plugin_repositories : Repositories<'a>,
    /// The dependency repositories.
    pub dependency_repositories : Repositories<'a>,
}

impl<'a> SettingsGradle<'a> {
    /// Name of generated file name for struct
    pub const FILE_NAME : &str = "settings.gradle.kts";

    /// Creates a new `SettingsGradle` instance.
    ///
    /// # Arguments
    ///
    /// * `plugins` - The plugins configuration.
    /// * `plugin_repositories` - The plugin repositories configuration.
    /// * `dependency_repositories` - The dependency repositories configuration.
    ///
    /// # Example
    ///
    /// ```
    /// let plugins = Plugins::new(/* plugins details */);
    /// let plugin_repositories = Repositories::new(/* plugin repositories details */);
    /// let dependency_repositories = Repositories::new(/* dependency repositories details */);
    ///
    /// let settings_gradle = SettingsGradle::new(plugins, plugin_repositories, dependency_repositories);
    /// ```
    pub fn new(
        plugins: Plugins<'a>,
        plugin_repositories: Repositories<'a>,
        dependency_repositories: Repositories<'a>,
    ) -> Self {
        SettingsGradle {
            plugins,
            plugin_repositories,
            dependency_repositories,
        }
    }
}

impl std::fmt::Display for SettingsGradle<'_> {
    /// Formats the `SettingsGradle` as a string.
    ///
    /// # Example
    ///
    /// ```
    /// let plugins = Plugins::new(/* plugins details */);
    /// let plugin_repositories = Repositories::new(/* plugin repositories details */);
    /// let dependency_repositories = Repositories::new(/* dependency repositories details */);
    ///
    /// let settings_gradle = SettingsGradle::new(plugins, plugin_repositories, dependency_repositories);
    ///
    /// assert_eq!(settings_gradle.to_string(), "/* formatted settings.gradle file */");
    /// ```
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        write!(f,"pluginManagement  {{\n {}\n{}\n }}",self.plugin_repositories.to_string(),self.plugins.to_string())?;
        write!(f,"dependencyResolutionManagement {{\n {}\n }}",self.dependency_repositories.to_string())
    }
}


#[cfg(feature = "generate")]
impl crate::Generate for SettingsGradle<'_> {
    fn generate(&self,directory : &str) {
        let create_directory = format!("{}\\{}",directory,Self::FILE_NAME);
        let _ = File::create(&create_directory).expect("Error Creating File").write_all(self.to_string().as_bytes());
    }
}