1//! Configuration specific to the `forge soldeer` command and the `forge_soldeer` package
2use serde::{Deserialize, Serialize};
3pub use soldeer_core::config::SoldeerConfig;
4use std::collections::BTreeMap;
56/// Soldeer dependencies config structure when it's defined as a map
7#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
8pub struct MapDependency {
9/// The version of the dependency
10pub version: String,
1112/// The url from where the dependency was retrieved
13#[serde(default, skip_serializing_if = "Option::is_none")]
14pub url: Option<String>,
1516/// The git URL for the source repo
17#[serde(default, skip_serializing_if = "Option::is_none")]
18pub git: Option<String>,
1920/// The commit in case git is used as dependency source
21#[serde(default, skip_serializing_if = "Option::is_none")]
22pub rev: Option<String>,
2324/// The branch in case git is used as dependency source
25#[serde(default, skip_serializing_if = "Option::is_none")]
26pub branch: Option<String>,
2728/// The git tag in case git is used as dependency source
29#[serde(default, skip_serializing_if = "Option::is_none")]
30pub tag: Option<String>,
31}
3233/// Type for Soldeer configs, under dependencies tag in the foundry.toml
34#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
35pub struct SoldeerDependencyConfig(BTreeMap<String, SoldeerDependencyValue>);
3637impl AsRef<Self> for SoldeerDependencyConfig {
38fn as_ref(&self) -> &Self {
39self40}
41}
4243/// Enum to cover both available formats for defining a dependency
44/// `dep = { version = "1.1", url = "https://my-dependency" }`
45/// or
46/// `dep = "1.1"`
47#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
48#[serde(untagged)]
49pub enum SoldeerDependencyValue {
50 Map(MapDependency),
51 Str(String),
52}