Use custom types to deserialize `--timings=json` output
Dependencies
- [2]
LOR3KOXGParse JSON output from `cargo build --timings`
Change contents
- replacement in src/timings.rs at line 4
use cargo_metadata::{PackageId, Target};use cargo_metadata::camino::Utf8PathBuf;use cargo_metadata::{Edition, PackageId}; - replacement in src/timings.rs at line 9
const CARGO_CUSOTM_PROFILE: [&str; 2] = ["--config", r#"profile.depwiz.inherits="dev""#];const CARGO_CUSTOM_PROFILE: [&str; 2] = ["--config", r#"profile.depwiz.inherits="dev""#];/// See https://doc.rust-lang.org/nightly/nightly-rustc/cargo/util/machine_message/struct.TimingInfo.html#method.reason/// This should always be "timing-info"#[derive(Clone, Debug, Serialize, Deserialize)]#[serde(rename_all = "kebab-case")]enum Reason {TimingInfo,} - edit in src/timings.rs at line 28
/// See https://doc.rust-lang.org/nightly/nightly-rustc/cargo/core/manifest/enum.TargetKind.html/// and https://doc.rust-lang.org/nightly/nightly-rustc/cargo/core/manifest/enum.TargetKind.html#impl-Serialize-for-TargetKind/// This is different to the original enum as `CrateType` has been manually flattened into this enum,/// so some information is lost in favour of simplicity// TODO: fix this limitation, make `TargetKind` match cargo's definition#[derive(Clone, Debug, Serialize, Deserialize)]#[serde(rename_all = "kebab-case")]enum TargetKind {Lib,Bin,Test,Bench,ExampleLib,ExampleBin,CustomBuild,Rlib,Dylib,Cdylib,Staticlib,ProcMacro,}/// See https://doc.rust-lang.org/nightly/nightly-rustc/cargo/core/manifest/struct.TargetInner.html#[derive(Clone, Debug, Serialize, Deserialize)]struct Target {kind: Vec<TargetKind>,name: String,src_path: Utf8PathBuf,edition: Edition,doc: bool,doctest: bool,test: bool,} - edit in src/timings.rs at line 63
/// The `Reason` enum only has a `timing-info` variant so this should make sure cargo isn't/// generating any unexpected messages - replacement in src/timings.rs at line 67
reason: String,reason: Reason, - replacement in src/timings.rs at line 79
.args(CARGO_CUSOTM_PROFILE).args(CARGO_CUSTOM_PROFILE) - replacement in src/timings.rs at line 88
.args(CARGO_CUSOTM_PROFILE).args(CARGO_CUSTOM_PROFILE) - edit in src/timings.rs at line 125
// Make sure it's actually a timings messageassert_eq!(json_message.reason, "timing-info");