export function byteify(string: string, encoding: "ascii" | "base64" | "hex") {
	switch (encoding) {
		case "ascii":
			return Uint8Array.from(string, (c) => c.charCodeAt(0));
		case "base64":
			return Uint8Array.from(
				atob(string.replace(/-/g, "+").replace(/_/g, "/")),
				(c) => c.charCodeAt(0),
			);
		case "hex":
			return new Uint8Array(
				string.match(/.{1,2}/g).map((byte) => parseInt(byte, 16)),
			);
	}
}

export function hexify(buffer: ArrayBuffer) {
	return Array.from(new Uint8Array(buffer)).reduce(
		(str, byte) => str + byte.toString(16).padStart(2, "0"),
		"",
	);
}

export function stringify(buffer: ArrayBuffer) {
	return String.fromCharCode(...new Uint8Array(buffer));
}
