From 46f39289a42898c6e0cbc03e0ce13246e9c94d93 Mon Sep 17 00:00:00 2001 From: Binoy Jayan Date: Sun, 17 Sep 2023 15:53:11 -0700 Subject: [PATCH] add built-in function time --- src/common/builtins.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/common/builtins.rs b/src/common/builtins.rs index 85a4c65..f3f86e6 100644 --- a/src/common/builtins.rs +++ b/src/common/builtins.rs @@ -1,4 +1,5 @@ use std::rc::Rc; +use std::time::{SystemTime, UNIX_EPOCH}; use crate::common::object::*; use lazy_static::lazy_static; @@ -13,6 +14,7 @@ lazy_static! { BuiltinFunction::new("rest".into(), builtin_rest), BuiltinFunction::new("push".into(), builtin_push), BuiltinFunction::new("str".into(), builtin_str), + BuiltinFunction::new("time".into(), builtin_time), ] }; } @@ -135,3 +137,15 @@ fn builtin_str(args: Vec>) -> Result, String> { } Ok(Rc::new(Object::Str(obj.to_string()))) } + +fn builtin_time(args: Vec>) -> Result, String> { + if args.len() != 0 { + return Err(String::from("'time' takes no argument(s)")); + } + let current_time = SystemTime::now(); + let duration = current_time + .duration_since(UNIX_EPOCH) + .expect("Time went backwards"); + let seconds = duration.as_secs(); + Ok(Rc::new(Object::Number(seconds as f64))) +}