atagen

matrix-rust-sdk

public
Star0
Watch0
ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk.git
xtask/src/workspace.rsRust31 lines907 B
1
use std::env;
2
3
use camino::Utf8PathBuf;
4
use serde::Deserialize;
5
use xshell::cmd;
6
7
use crate::{Result, sh};
8
9
pub fn root_path() -> Result<Utf8PathBuf> {
10
    #[derive(Deserialize)]
11
    struct Metadata {
12
        workspace_root: Utf8PathBuf,
13
    }
14
15
    let cargo = env::var("CARGO").unwrap_or_else(|_| "cargo".to_owned());
16
    let sh = sh();
17
    let metadata_json = cmd!(sh, "{cargo} metadata --no-deps --format-version 1").read()?;
18
    Ok(serde_json::from_str::<Metadata>(&metadata_json)?.workspace_root)
19
}
20
21
pub fn target_path() -> Result<Utf8PathBuf> {
22
    #[derive(Deserialize)]
23
    struct Metadata {
24
        target_directory: Utf8PathBuf,
25
    }
26
27
    let cargo = env::var("CARGO").unwrap_or_else(|_| "cargo".to_owned());
28
    let sh = sh();
29
    let metadata_json = cmd!(sh, "{cargo} metadata --no-deps --format-version 1").read()?;
30
    Ok(serde_json::from_str::<Metadata>(&metadata_json)?.target_directory)
31
}