foundry_config/
soldeer.rs

1//! Configuration specific to the `forge soldeer` command and the `forge_soldeer` package
2
3use std::collections::BTreeMap;
4
5use serde::{Deserialize, Serialize};
6
7/// Soldeer dependencies config structure when it's defined as a map
8#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
9pub struct MapDependency {
10    /// The version of the dependency
11    pub version: String,
12
13    /// The url from where the dependency was retrieved
14    #[serde(default, skip_serializing_if = "Option::is_none")]
15    pub url: Option<String>,
16
17    /// The commit in case git is used as dependency retrieval
18    #[serde(default, skip_serializing_if = "Option::is_none")]
19    pub rev: Option<String>,
20}
21
22/// Type for Soldeer configs, under dependencies tag in the foundry.toml
23#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
24pub struct SoldeerDependencyConfig(BTreeMap<String, SoldeerDependencyValue>);
25
26impl AsRef<Self> for SoldeerDependencyConfig {
27    fn as_ref(&self) -> &Self {
28        self
29    }
30}
31
32/// Enum to cover both available formats for defining a dependency
33/// `dep = { version = "1.1", url = "https://my-dependency" }`
34/// or
35/// `dep = "1.1"`
36#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
37#[serde(untagged)]
38pub enum SoldeerDependencyValue {
39    Map(MapDependency),
40    Str(String),
41}
42
43/// Location where to store the remappings, either in `remappings.txt` or in the `foundry.toml`
44#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Default)]
45#[serde(rename_all = "lowercase")]
46pub enum RemappingsLocation {
47    #[default]
48    Txt,
49    Config,
50}
51
52fn default_true() -> bool {
53    true
54}
55
56/// Type for Soldeer configs, under soldeer tag in the foundry.toml
57#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
58pub struct SoldeerConfig {
59    #[serde(default = "default_true")]
60    pub remappings_generate: bool,
61
62    #[serde(default)]
63    pub remappings_regenerate: bool,
64
65    #[serde(default = "default_true")]
66    pub remappings_version: bool,
67
68    #[serde(default)]
69    pub remappings_prefix: String,
70
71    #[serde(default)]
72    pub remappings_location: RemappingsLocation,
73
74    #[serde(default)]
75    pub recursive_deps: bool,
76}
77
78impl AsRef<Self> for SoldeerConfig {
79    fn as_ref(&self) -> &Self {
80        self
81    }
82}
83impl Default for SoldeerConfig {
84    fn default() -> Self {
85        Self {
86            remappings_generate: true,
87            remappings_regenerate: false,
88            remappings_version: true,
89            remappings_prefix: String::new(),
90            remappings_location: Default::default(),
91            recursive_deps: false,
92        }
93    }
94}