git.delta.rocks / jrsonnet / refs/commits / e88030decfb4

difftreelog

source

crates/jrsonnet-stdlib/src/encoding.rs1.1 KiBsourcehistory
1use base64::{engine::general_purpose::STANDARD, Engine};2use jrsonnet_evaluator::{3	error::{ErrorKind::RuntimeError, Result},4	function::builtin,5	typed::{Either, Either2},6	IBytes, IStr,7};89#[builtin]10pub fn builtin_encode_utf8(str: IStr) -> IBytes {11	str.cast_bytes()12}1314#[builtin]15pub fn builtin_decode_utf8(arr: IBytes) -> Result<IStr> {16	Ok(arr17		.cast_str()18		.ok_or_else(|| RuntimeError("bad utf8".into()))?)19}2021#[builtin]22pub fn builtin_base64(input: Either![IStr, IBytes]) -> String {23	use Either2::*;24	match input {25		A(l) => STANDARD.encode(l.as_bytes()),26		B(a) => STANDARD.encode(a.as_slice()),27	}28}2930#[builtin]31pub fn builtin_base64_decode_bytes(str: IStr) -> Result<IBytes> {32	Ok(STANDARD33		.decode(str.as_bytes())34		.map_err(|e| RuntimeError(format!("invalid base64: {e}").into()))?35		.as_slice()36		.into())37}3839#[builtin]40pub fn builtin_base64_decode(str: IStr) -> Result<String> {41	let bytes = STANDARD42		.decode(str.as_bytes())43		.map_err(|e| RuntimeError(format!("invalid base64: {e}").into()))?;44	Ok(String::from_utf8(bytes).map_err(|_| RuntimeError("bad utf8".into()))?)45}