difftreelog
perf faster format
in: master
6 files changed
crates/jrsonnet-evaluator/build.rsdiffbeforeafterboth39 if **name == *"join" || **name == *"manifestJsonEx" ||39 if **name == *"join" || **name == *"manifestJsonEx" ||40 **name == *"escapeStringJson" || **name == *"equals" ||40 **name == *"escapeStringJson" || **name == *"equals" ||41 **name == *"base64" || **name == *"foldl" || **name == *"foldr" ||41 **name == *"base64" || **name == *"foldl" || **name == *"foldr" ||42 **name == *"sortImpl" || **name == *"range"42 **name == *"sortImpl" || **name == *"format" || **name == *"range"43 )43 )44 })44 })45 .collect(),45 .collect(),crates/jrsonnet-evaluator/src/builtin/format.rsdiffbeforeafterbothno changes
crates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth1pub mod stdlib;1pub mod stdlib;2pub use stdlib::*;2pub use stdlib::*;34pub mod format;35crates/jrsonnet-evaluator/src/error.rsdiffbeforeafterboth60 StringManifestOutputIsNotAString,60 StringManifestOutputIsNotAString,616162 ImportCallbackError(String),62 ImportCallbackError(String),63 InvalidUnicodeCodepointGot(u32),63}64}646565#[derive(Clone, Debug)]66#[derive(Clone, Debug)]crates/jrsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth1use crate::{1use crate::{2 builtin::format::{format_arr, format_obj},2 context_creator, create_error, create_error_result, equals, escape_string_json, future_wrapper,3 context_creator, create_error, create_error_result, equals, escape_string_json, future_wrapper,3 lazy_val, manifest_json_ex, parse_args, primitive_equals, push, with_state, Context,4 lazy_val, manifest_json_ex, parse_args, primitive_equals, push, with_state, Context,4 ContextCreator, Error, FuncDesc, LazyBinding, LazyVal, ObjMember, ObjValue, Result, Val,5 ContextCreator, Error, FuncDesc, LazyBinding, LazyVal, ObjMember, ObjValue, Result, Val,633 }634 }634 Ok(Val::Arr(Rc::new(new_arr)))635 Ok(Val::Arr(Rc::new(new_arr)))635 }))?,636 }))?,637 // faster638 ("std", "format") => parse_args!(context, "std.format", args, 2, [639 0, str: [Val::Str]!!Val::Str, vec![ValType::Str];640 1, vals: [Val::Arr|Val::Obj], vec![ValType::Arr, ValType::Obj];641 ], {642 match vals {643 Val::Arr(vals) => Val::Str(format_arr(&str, &vals).unwrap().into()),644 Val::Obj(obj) => Val::Str(format_obj(&str, &obj).unwrap().into()),645 _ => unreachable!()646 }647 }),636 // faster648 // faster637 ("std", "range") => parse_args!(context, "std.range", args, 2, [649 ("std", "range") => parse_args!(context, "std.range", args, 2, [638 0, from: [Val::Num]!!Val::Num, vec![ValType::Num];650 0, from: [Val::Num]!!Val::Num, vec![ValType::Num];648 0, n: [Val::Num]!!Val::Num, vec![ValType::Num];660 0, n: [Val::Num]!!Val::Num, vec![ValType::Num];649 ], {661 ], {650 let mut out = String::new();662 let mut out = String::new();651 out.push(std::char::from_u32(n as u32).unwrap());663 out.push(std::char::from_u32(n as u32).ok_or_else(||664 create_error(crate::error::Error::InvalidUnicodeCodepointGot(n as u32))665 )?);652 Val::Str(out.into())666 Ok(Val::Str(out.into()))653 }),667 })?,654 ("std", "encodeUTF8") => parse_args!(context, "std.encodeUtf8", args, 1, [668 ("std", "encodeUTF8") => parse_args!(context, "std.encodeUtf8", args, 1, [655 0, str: [Val::Str]!!Val::Str, vec![ValType::Str];669 0, str: [Val::Str]!!Val::Str, vec![ValType::Str];656 ], {670 ], {crates/jrsonnet-evaluator/src/val.rsdiffbeforeafterboth405 out405 out406}406}407408pub fn to_string(val: &Val) -> Result<Rc<str>> {409 Ok(match val {410 Val::Bool(true) => "true".into(),411 Val::Null => "null".into(),412 Val::Str(s) => s.clone(),413 v => v.clone().into_json(0)?,414 })415}407416408#[test]417#[test]409fn json_test() {418fn json_test() {