actions-core 0.0.2

Github Actions Core
Documentation
use std::env;

pub(crate) fn cmd_arg<V: ToString>(k: &str, v: V) -> String {
	format!("{}={}", k, escape_property(v))
}

pub(crate) fn escape_data<D: ToString>(data: D) -> String {
	data.to_string()
		.replace('%', "%25")
		.replace('\r', "%0D")
		.replace('\n', "%0A")
}

pub(crate) fn escape_property<P: ToString>(prop: P) -> String {
	prop.to_string()
		.replace('%', "%25")
		.replace('\r', "%0D")
		.replace('\n', "%0A")
		.replace(':', "%3A")
		.replace(',', "%2C")
}

pub(crate) fn var_from_name<K: ToString>(
	prefix: &str,
	name: K,
) -> Result<String, env::VarError> {
	let suffix = name.to_string().replace(' ', "_").to_uppercase();
	let key = format!("{}_{}", prefix, suffix);

	env::var(key)
}