use std::collections::BTreeMap;
use serde::Deserialize;
use serde::Serialize;
#[derive(Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub struct Contract {
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub hashes: BTreeMap<String, String>,
#[serde(default, skip_serializing_if = "serde_json::Value::is_null")]
pub abi: serde_json::Value,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<String>,
#[serde(default, skip_serializing_if = "serde_json::Value::is_null")]
pub devdoc: serde_json::Value,
#[serde(default, skip_serializing_if = "serde_json::Value::is_null")]
pub userdoc: serde_json::Value,
#[serde(default, skip_serializing_if = "serde_json::Value::is_null")]
pub storage_layout: serde_json::Value,
#[serde(default, skip_serializing_if = "serde_json::Value::is_null")]
pub ast: serde_json::Value,
#[serde(default, skip_serializing_if = "serde_json::Value::is_null")]
pub asm: serde_json::Value,
#[cfg(feature = "resolc")]
#[serde(default, skip_serializing_if = "Option::is_none", skip_deserializing)]
pub assembly: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", skip_deserializing)]
pub bin: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", skip_deserializing)]
pub bin_runtime: Option<String>,
#[cfg(feature = "resolc")]
#[serde(default, skip_deserializing)]
pub factory_deps_unlinked: std::collections::BTreeSet<String>,
#[cfg(feature = "resolc")]
#[serde(default, skip_deserializing)]
pub factory_deps: BTreeMap<String, String>,
#[cfg(feature = "resolc")]
#[serde(default, skip_deserializing)]
pub missing_libraries: std::collections::BTreeSet<String>,
#[cfg(feature = "resolc")]
#[serde(default, skip_deserializing)]
pub object_format: Option<revive_common::ObjectFormat>,
}