fix: source parsing for local paths (#633)

This commit is contained in:
Matthias Seitz 2021-11-29 18:02:11 +01:00 committed by GitHub
parent e15252dd8f
commit 5dfc1bd171
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 4 deletions

View File

@ -151,7 +151,8 @@ impl Context {
/// Create a context from the code generation arguments. /// Create a context from the code generation arguments.
pub fn from_abigen(args: Abigen) -> Result<Self> { pub fn from_abigen(args: Abigen) -> Result<Self> {
// get the actual ABI string // get the actual ABI string
let abi_str = args.abi_source.get().context("failed to get ABI JSON")?; let abi_str =
args.abi_source.get().map_err(|e| anyhow!("failed to get ABI JSON: {}", e))?;
let mut abi_parser = AbiParser::default(); let mut abi_parser = AbiParser::default();
let (abi, human_readable): (Abi, _) = if let Ok(abi) = abi_parser.parse_str(&abi_str) { let (abi, human_readable): (Abi, _) = if let Ok(abi) = abi_parser.parse_str(&abi_str) {

View File

@ -60,7 +60,7 @@ impl Source {
if matches!(source.chars().next(), Some('[' | '{')) { if matches!(source.chars().next(), Some('[' | '{')) {
return Ok(Source::String(source.to_owned())) return Ok(Source::String(source.to_owned()))
} }
let root = env::current_dir()?.canonicalize()?; let root = env::var("CARGO_MANIFEST_DIR")?;
Source::with_root(root, source) Source::with_root(root, source)
} }
@ -72,6 +72,7 @@ impl Source {
P: AsRef<Path>, P: AsRef<Path>,
S: AsRef<str>, S: AsRef<str>,
{ {
let source = source.as_ref();
let root = root.as_ref(); let root = root.as_ref();
cfg_if! { cfg_if! {
if #[cfg(target_arch = "wasm32")] { if #[cfg(target_arch = "wasm32")] {
@ -87,10 +88,10 @@ impl Source {
.map_err(|_| anyhow!("root path '{}' is not absolute", root.display()))?; .map_err(|_| anyhow!("root path '{}' is not absolute", root.display()))?;
} }
} }
let url = base.join(source.as_ref())?; let url = base.join(source)?;
match url.scheme() { match url.scheme() {
"file" => Ok(Source::local(url.path().to_string())), "file" => Ok(Source::local(source.to_string())),
"http" | "https" => match url.host_str() { "http" | "https" => match url.host_str() {
Some("etherscan.io") => Source::etherscan( Some("etherscan.io") => Source::etherscan(
url.path() url.path()