use std::path::PathBuf;
use proc_macro2::TokenStream;
use syn::ItemStruct;
use crate::error::*;
pub fn get_root_src_path(span: &ItemStruct) -> Result<PathBuf, TokenStream> {
match std::env::var("CARGO_MANIFEST_DIR") {
Err(error) => Err(err!(
span,
"Couldn't read CARGO_MANIFEST_DIR environment variable in InterStruct: {}",
error
)),
Ok(path) => {
let mut path = PathBuf::from(path);
if !path.exists() {
return Err(err!(
span,
"CARGO_MANIFEST_DIR path doesn't exist in InterStruct: {:?}",
path
));
}
path.push("src");
if !path.exists() {
return Err(
err!(
span,
"InterStruct currently expects the source to be located in $CARGO_MANIFEST_DIR/src: {:?}", path
)
);
}
Ok(path)
}
}
}