feat: abi as an extra file (#1166)

This commit is contained in:
Bjerg 2022-04-23 10:40:25 +02:00 committed by GitHub
parent 1b044652f0
commit 8444b8ebbe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 0 deletions

View File

@ -396,6 +396,7 @@ impl ExtraOutputValues {
/// Determines what to emit as additional file /// Determines what to emit as additional file
#[derive(Debug, Copy, Clone, Eq, PartialEq, Default)] #[derive(Debug, Copy, Clone, Eq, PartialEq, Default)]
pub struct ExtraOutputFiles { pub struct ExtraOutputFiles {
pub abi: bool,
pub metadata: bool, pub metadata: bool,
pub ir_optimized: bool, pub ir_optimized: bool,
pub ewasm: bool, pub ewasm: bool,
@ -420,6 +421,7 @@ impl ExtraOutputFiles {
/// Returns an instance where all values are set to `true` /// Returns an instance where all values are set to `true`
pub fn all() -> Self { pub fn all() -> Self {
Self { Self {
abi: true,
metadata: true, metadata: true,
ir_optimized: true, ir_optimized: true,
ewasm: true, ewasm: true,
@ -435,6 +437,9 @@ impl ExtraOutputFiles {
let mut config = Self::default(); let mut config = Self::default();
for value in settings.into_iter() { for value in settings.into_iter() {
match value { match value {
ContractOutputSelection::Abi => {
config.abi = true;
}
ContractOutputSelection::Metadata => { ContractOutputSelection::Metadata => {
config.metadata = true; config.metadata = true;
} }
@ -461,6 +466,14 @@ impl ExtraOutputFiles {
/// Write the set values as separate files /// Write the set values as separate files
pub fn write_extras(&self, contract: &Contract, file: &Path) -> Result<(), SolcError> { pub fn write_extras(&self, contract: &Contract, file: &Path) -> Result<(), SolcError> {
if self.abi {
if let Some(ref abi) = contract.abi {
let file = file.with_extension("abi.json");
fs::write(&file, serde_json::to_string_pretty(abi)?)
.map_err(|err| SolcError::io(err, file))?
}
}
if self.metadata { if self.metadata {
if let Some(ref metadata) = contract.metadata { if let Some(ref metadata) = contract.metadata {
let file = file.with_extension("metadata.json"); let file = file.with_extension("metadata.json");