atproto-static-web 0.2.0

A web server that presents AT Proto posts without Javascript.
use serde::Deserialize;
use std::{collections::HashMap, env, fs, path::Path};

fn main() {
	let out_dir = env::var_os("OUT_DIR").unwrap();
	let out_dir = Path::new(&out_dir);

	// Get maud version and write it to OUT_DIR/maud.txt
	let cargo_toml: CargoToml = toml::from_str(include_str!("Cargo.toml")).unwrap();
	let maud = cargo_toml.dependencies.get("maud").unwrap();
	let version = maud.version();
	fs::write(out_dir.join("maud.txt"), version).unwrap();

	println!("cargo::rerun-if-changed=build.rs,Cargo.toml");
}

#[derive(Deserialize)]
struct CargoToml {
	dependencies: HashMap<String, PackageManifest>,
}

#[derive(Deserialize)]
#[serde(untagged)]
enum PackageManifest {
	Version(String),
	Manifest { version: String },
}

impl PackageManifest {
	const fn version(&self) -> &str {
		match self {
			Self::Version(version) => version.as_str(),
			Self::Manifest { version } => version.as_str(),
		}
	}
}