oneline_template/functions/int/
hex_fmt.rs

1use crate::function_executor::*;
2
3/// Function: `int:hex_fmt`
4/// 
5/// Input: `int`
6///
7/// * first argument: uint number of leading zeroes
8///
9/// Returns `string`
10pub struct HexFmt;
11
12impl FunctionExecutor for HexFmt {
13    fn schema(&self) -> FunctionSchema {
14        FunctionSchema::new("int:hex_fmt")
15            .with_argument(FunctionArgument::uint())
16    }
17
18    fn call(&self, value: Value, arguments: &[Value]) -> Result<Value, FunctionError> {
19        let value = value.as_int()?;
20        let value = format!("{:x}", value);
21        let leading_zeroes = arguments[0].as_uint()?;
22        let leading_zeroes = *leading_zeroes as usize;
23        let leading_zeroes = leading_zeroes.saturating_sub(value.len());
24        let mut result = "0".repeat(leading_zeroes);
25        result += value.as_str();
26        let value = Value::String(result);
27        return Ok(value);
28    }
29}