use std::{fs, path::Path};
struct Image {
placeholder: String,
filename: String,
remote_url: String,
}
impl Image {
fn new(filename: &str) -> Self {
let placeholder = format!("{{{{{}}}}}", filename); let remote_url = format!(
"https://raw.githubusercontent.com/StefanMathis/stem_material/refs/heads/main/docs/{}",
filename
);
Self {
placeholder,
filename: filename.to_string(),
remote_url,
}
}
}
fn main() {
if std::env::var("DOCS_RS").as_deref() == Ok("1") {
return;
}
let readme_template =
fs::read_to_string("README.template.md").expect("Failed to read README template");
let versioned_readme = readme_template.replace(
"{{VERSION}}",
&std::env::var("CARGO_PKG_VERSION").expect("version is available in build.rs"),
);
let images = [
Image::new("relative_permeability.svg"),
Image::new("jordan_model.svg"),
];
let out_dir = std::env::var("CARGO_MANIFEST_DIR").expect("manifest is available in build.rs");
let doc_dir = format!("{}/target/doc/stem_material", out_dir);
let _ = fs::create_dir_all(&doc_dir);
let mut local_readme = versioned_readme.clone();
for img in &images {
let local_path = format!("docs/{}", img.filename);
local_readme = local_readme.replace(&img.placeholder, &local_path);
let img_src = Path::new(&out_dir).join(&local_path);
let img_dst = Path::new(&doc_dir).join(&local_path);
let _ = fs::copy(img_src, img_dst);
}
let _ = fs::write("README_local.md", local_readme);
let mut docsrs_readme = versioned_readme.clone();
for img in &images {
docsrs_readme = docsrs_readme.replace(&img.placeholder, &img.remote_url);
}
let _ = fs::write("README.md", docsrs_readme);
}