foundry_config/
warning.rs1use figment::Profile;
2use serde::{Deserialize, Serialize};
3use std::{fmt, path::PathBuf};
4
5#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
7#[serde(tag = "type")]
8pub enum Warning {
9 UnknownSection {
11 unknown_section: Profile,
13 source: Option<String>,
15 },
16 NoLocalToml(PathBuf),
18 CouldNotReadToml {
20 path: PathBuf,
22 err: String,
24 },
25 CouldNotWriteToml {
27 path: PathBuf,
29 err: String,
31 },
32 CouldNotFixProfile {
34 path: PathBuf,
36 profile: String,
38 err: String,
40 },
41 DeprecatedKey {
43 old: String,
45 new: String,
48 },
49 UnknownKey {
51 key: String,
53 profile: String,
55 source: String,
57 },
58 UnknownSectionKey {
60 key: String,
62 section: String,
64 source: String,
66 },
67}
68
69impl fmt::Display for Warning {
70 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
71 match self {
72 Self::UnknownSection { unknown_section, source } => {
73 let source = source.as_ref().map(|src| format!(" in {src}")).unwrap_or_default();
74 write!(
75 f,
76 "Found unknown config section{source}: [{unknown_section}]\n\
77 This notation for profiles has been deprecated and may result in the profile \
78 not being registered in future versions.\n\
79 Please use [profile.{unknown_section}] instead or run `forge config --fix`."
80 )
81 }
82 Self::NoLocalToml(path) => write!(
83 f,
84 "No local TOML found to fix at {}.\n\
85 Change the current directory to a project path or set the foundry.toml path with \
86 the `FOUNDRY_CONFIG` environment variable",
87 path.display()
88 ),
89
90 Self::CouldNotReadToml { path, err } => {
91 write!(f, "Could not read TOML at {}: {err}", path.display())
92 }
93 Self::CouldNotWriteToml { path, err } => {
94 write!(f, "Could not write TOML to {}: {err}", path.display())
95 }
96 Self::CouldNotFixProfile { path, profile, err } => {
97 write!(f, "Could not fix [{profile}] in TOML at {}: {err}", path.display())
98 }
99 Self::DeprecatedKey { old, new } if new.is_empty() => {
100 write!(f, "Key `{old}` is being deprecated and will be removed in future versions.")
101 }
102 Self::DeprecatedKey { old, new } => {
103 write!(
104 f,
105 "Key `{old}` is being deprecated in favor of `{new}`. It will be removed in future versions."
106 )
107 }
108 Self::UnknownKey { key, profile, source } => {
109 write!(
110 f,
111 "Found unknown `{key}` config for profile `{profile}` defined in {source}."
112 )
113 }
114 Self::UnknownSectionKey { key, section, source } => {
115 write!(
116 f,
117 "Found unknown `{key}` config key in section `{section}` defined in {source}."
118 )
119 }
120 }
121 }
122}
123
124impl std::error::Error for Warning {}