| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| use anyhow::{Error, Context as _}; |
| use serde_derive::Deserialize; |
| use std::{fs, path::PathBuf}; |
| |
| #[derive(Clone, Debug, Default, Deserialize)] |
| pub struct DataFile { |
| pub src: String, |
| pub dst: String, |
| } |
| |
| #[derive(Clone, Debug, Default, Deserialize)] |
| pub struct Manifest { |
| #[serde(default)] |
| pub library_search_paths: Vec<String>, |
| #[serde(default)] |
| pub additional_shared_libraries: Vec<String>, |
| #[serde(default)] |
| pub additional_static_libraries: Vec<String>, |
| #[serde(default)] |
| pub data_files: Vec<DataFile>, |
| } |
| |
| pub fn load_manifest(manifest_path: &Option<PathBuf>) -> Result<Manifest, Error> { |
| let cwd: PathBuf = if let Some(actual_manifest_path) = manifest_path.as_ref() { |
| actual_manifest_path.parent().expect("manifest_path parent").to_path_buf() |
| } else { |
| std::fs::canonicalize(std::env::current_dir()?) |
| .context("autotest: canonicalize working directory")? |
| }; |
| let manifest_path = cwd.join("Fargo.toml"); |
| if !manifest_path.exists() { |
| return Ok(Manifest::default()); |
| } |
| let manifest_contents = fs::read_to_string(manifest_path)?; |
| let manifest = toml::from_str(&manifest_contents)?; |
| Ok(manifest) |
| } |