foundry_config/
soldeer.rs

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;
5
6/// 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
10    pub version: String,
11
12    /// The url from where the dependency was retrieved
13    #[serde(default, skip_serializing_if = "Option::is_none")]
14    pub url: Option<String>,
15
16    /// The git URL for the source repo
17    #[serde(default, skip_serializing_if = "Option::is_none")]
18    pub git: Option<String>,
19
20    /// The commit in case git is used as dependency source
21    #[serde(default, skip_serializing_if = "Option::is_none")]
22    pub rev: Option<String>,
23
24    /// The branch in case git is used as dependency source
25    #[serde(default, skip_serializing_if = "Option::is_none")]
26    pub branch: Option<String>,
27
28    /// The git tag in case git is used as dependency source
29    #[serde(default, skip_serializing_if = "Option::is_none")]
30    pub tag: Option<String>,
31}
32
33/// 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>);
36
37impl AsRef<Self> for SoldeerDependencyConfig {
38    fn as_ref(&self) -> &Self {
39        self
40    }
41}
42
43/// 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}