60 lines
1.5 KiB
Rust
60 lines
1.5 KiB
Rust
use std::path::PathBuf;
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
pub struct UpdateOptions {
|
|
next_version: String,
|
|
global_changelog: String,
|
|
}
|
|
|
|
pub type Projects = Vec<Project>;
|
|
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
pub struct Project {
|
|
path: Option<PathBuf>,
|
|
r#type: ProjectType,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
#[serde(tag = "type")]
|
|
pub enum ProjectType {
|
|
#[cfg(feature = "rust-workspace")]
|
|
#[serde(alias = "rust_workspace")]
|
|
RustWorkspace,
|
|
#[cfg(feature = "rust-crate")]
|
|
#[serde(alias = "json_edit")]
|
|
RustCrate,
|
|
#[cfg(feature = "toml-edit")]
|
|
#[serde(alias = "toml_edit")]
|
|
TomlEdit,
|
|
#[cfg(feature = "yaml-edit")]
|
|
#[serde(alias = "yaml_edit")]
|
|
YamlEdit,
|
|
#[cfg(feature = "json-edit")]
|
|
#[serde(alias = "json_edit")]
|
|
JsonEdit,
|
|
}
|
|
|
|
impl Project {
|
|
pub fn new(path: Option<PathBuf>, r#type: ProjectType) -> Self {
|
|
Self { path, r#type }
|
|
}
|
|
|
|
pub fn execute(&self, options: &UpdateOptions) -> anyhow::Result<()> {
|
|
match self.r#type {
|
|
#[cfg(feature = "rust-workspace")]
|
|
ProjectType::RustWorkspace => todo!(),
|
|
#[cfg(feature = "rust-crate")]
|
|
ProjectType::RustCrate => todo!(),
|
|
#[cfg(feature = "toml-edit")]
|
|
ProjectType::TomlEdit => todo!(),
|
|
#[cfg(feature = "yaml-edit")]
|
|
ProjectType::YamlEdit => todo!(),
|
|
#[cfg(feature = "json-edit")]
|
|
ProjectType::JsonEdit => todo!(),
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
}
|