mirror of
https://github.com/microsoft/regorus.git
synced 2026-08-05 02:16:11 +00:00
Added semver.is_valid and semver.compare (#49)
* Completed semver.is_valid and semver.compare * Addressed PR comments Signed-off-by: Minh Nguyen <luonguyen@microsoft.com> --------- Signed-off-by: Minh Nguyen <luonguyen@microsoft.com> Co-authored-by: Anand Krishnamoorthi <anakrish@microsoft.com>
This commit is contained in:
committed by
GitHub
parent
a75f7c51df
commit
e838d5af65
+2
-1
@@ -11,6 +11,7 @@ pub mod deprecated;
|
||||
mod encoding;
|
||||
pub mod numbers;
|
||||
mod objects;
|
||||
mod semver;
|
||||
pub mod sets;
|
||||
mod strings;
|
||||
mod time;
|
||||
@@ -59,7 +60,7 @@ lazy_static! {
|
||||
//http::register(&mut m);
|
||||
//net::register(&mut m);
|
||||
//uuid::register(&mut m);
|
||||
//semantic_versions::register(&mut m);
|
||||
semver::register(&mut m);
|
||||
//rego::register(&mut m);
|
||||
//opa::register(&mut m);
|
||||
debugging::register(&mut m);
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
use crate::ast::{Expr, Ref};
|
||||
use crate::builtins;
|
||||
use crate::builtins::utils::{ensure_args_count, ensure_string};
|
||||
use crate::lexer::Span;
|
||||
use crate::value::Value;
|
||||
|
||||
use semver::Version;
|
||||
|
||||
use std::cmp::Ordering;
|
||||
use std::collections::HashMap;
|
||||
|
||||
use anyhow::{Ok, Result};
|
||||
|
||||
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
|
||||
m.insert("semver.compare", (compare, 2));
|
||||
m.insert("semver.is_valid", (is_valid, 1));
|
||||
}
|
||||
|
||||
fn compare(span: &Span, params: &[Ref<Expr>], args: &[Value]) -> Result<Value> {
|
||||
let name = "semver.compare";
|
||||
ensure_args_count(span, name, params, args, 2)?;
|
||||
|
||||
let v1 = ensure_string(name, ¶ms[0], &args[0])?;
|
||||
let v2 = ensure_string(name, ¶ms[1], &args[1])?;
|
||||
let version1 = Version::parse(&v1)?;
|
||||
let version2 = Version::parse(&v2)?;
|
||||
let result = match version1.cmp_precedence(&version2) {
|
||||
Ordering::Less => -1,
|
||||
Ordering::Equal => 0,
|
||||
Ordering::Greater => 1,
|
||||
};
|
||||
Ok(Value::from_float(result as f64))
|
||||
}
|
||||
|
||||
fn is_valid(span: &Span, params: &[Ref<Expr>], args: &[Value]) -> Result<Value> {
|
||||
let name = "semver.is_valid";
|
||||
ensure_args_count(span, name, params, args, 1)?;
|
||||
let v = ensure_string(name, ¶ms[0], &args[0])?;
|
||||
Ok(Value::Bool(Version::parse(&v).is_ok()))
|
||||
}
|
||||
Reference in New Issue
Block a user