Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dsc/locales/en-us.toml
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ tableHeader_functionName = "Function"
tableHeader_functionCategory = "Category"
tableHeader_minArgs = "MinArgs"
tableHeader_maxArgs = "MaxArgs"
tableHeader_argTypes = "ArgTypes"
tableHeader_argTypes = "ReturnTypes"
invalidFunctionFilter = "Invalid function filter"
maxInt = "maxInt"
invalidManifest = "Error in manifest for"
Expand Down
14 changes: 7 additions & 7 deletions dsc/src/subcommand.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use crate::resolve::{get_contents, Include};
use crate::resource_command::{get_resource, self};
use crate::tablewriter::Table;
use crate::util::{get_input, get_schema, in_desired_state, set_dscconfigroot, validate_json, write_object, DSC_CONFIG_ROOT, EXIT_DSC_ASSERTION_FAILED, EXIT_DSC_ERROR, EXIT_INVALID_ARGS, EXIT_INVALID_INPUT, EXIT_JSON_ERROR};
use dsc_lib::functions::AcceptedArgKind;
use dsc_lib::functions::FunctionArgKind;
use dsc_lib::{
configure::{
config_doc::{
Expand Down Expand Up @@ -698,11 +698,11 @@ fn list_functions(functions: &FunctionDispatcher, function_name: Option<&String>
}
let mut include_separator = false;
let accepted_arg_types= [
(AcceptedArgKind::Array, "a"),
(AcceptedArgKind::Boolean, "b"),
(AcceptedArgKind::Number, "n"),
(AcceptedArgKind::String, "s"),
(AcceptedArgKind::Object, "o"),
(FunctionArgKind::Array, "a"),
(FunctionArgKind::Boolean, "b"),
(FunctionArgKind::Number, "n"),
(FunctionArgKind::String, "s"),
(FunctionArgKind::Object, "o"),
];

let asterisks = String::from("*");
Expand All @@ -726,7 +726,7 @@ fn list_functions(functions: &FunctionDispatcher, function_name: Option<&String>
// construct arg_types from '-' times number of accepted_arg_types
let mut arg_types = "-".repeat(accepted_arg_types.len());
for (i, (arg_type, letter)) in accepted_arg_types.iter().enumerate() {
if function.accepted_arg_types.contains(arg_type) {
if function.return_types.contains(arg_type) {
arg_types.replace_range(i..=i, letter);
}
}
Expand Down
2 changes: 2 additions & 0 deletions dsc_lib/locales/en-us.toml
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,8 @@ noBooleanArgs = "Function '%{name}' does not accept boolean arguments, accepted
noNumberArgs = "Function '%{name}' does not accept number arguments, accepted types are: %{accepted_args_string}"
noObjectArgs = "Function '%{name}' does not accept object arguments, accepted types are: %{accepted_args_string}"
noStringArgs = "Function '%{name}' does not accept string arguments, accepted types are: %{accepted_args_string}"
tooFewArgs = "Function '%{name}' requires at least %{count} arguments"
tooManyArgs = "Function '%{name}' does not accept more than %{count} arguments"

[functions.add]
description = "Adds two or more numbers together"
Expand Down
34 changes: 15 additions & 19 deletions dsc_lib/src/functions/add.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

use crate::DscError;
use crate::configure::context::Context;
use crate::functions::{AcceptedArgKind, Function, FunctionCategory};
use crate::functions::{FunctionArgKind, Function, FunctionCategory, FunctionMetadata};
use rust_i18n::t;
use serde_json::Value;
use tracing::debug;
Expand All @@ -12,24 +12,20 @@ use tracing::debug;
pub struct Add {}

impl Function for Add {
fn description(&self) -> String {
t!("functions.add.description").to_string()
}

fn category(&self) -> FunctionCategory {
FunctionCategory::Numeric
}

fn min_args(&self) -> usize {
2
}

fn max_args(&self) -> usize {
2
}

fn accepted_arg_types(&self) -> Vec<AcceptedArgKind> {
vec![AcceptedArgKind::Number]
fn get_metadata(&self) -> FunctionMetadata {
FunctionMetadata {
name: "add".to_string(),
description: t!("functions.add.description").to_string(),
category: FunctionCategory::Numeric,
min_args: 2,
max_args: 2,
accepted_arg_ordered_types: vec![
vec![FunctionArgKind::Number],
vec![FunctionArgKind::Number],
],
remaining_arg_accepted_types: None,
return_types: vec![FunctionArgKind::Number],
}
}

fn invoke(&self, args: &[Value], _context: &Context) -> Result<Value, DscError> {
Expand Down
34 changes: 15 additions & 19 deletions dsc_lib/src/functions/and.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

use crate::DscError;
use crate::configure::context::Context;
use crate::functions::{AcceptedArgKind, Function, FunctionCategory};
use crate::functions::{FunctionArgKind, Function, FunctionCategory, FunctionMetadata};
use rust_i18n::t;
use serde_json::Value;
use tracing::debug;
Expand All @@ -12,24 +12,20 @@ use tracing::debug;
pub struct And {}

impl Function for And {
fn description(&self) -> String {
t!("functions.and.description").to_string()
}

fn category(&self) -> FunctionCategory {
FunctionCategory::Logical
}

fn min_args(&self) -> usize {
2
}

fn max_args(&self) -> usize {
usize::MAX
}

fn accepted_arg_types(&self) -> Vec<AcceptedArgKind> {
vec![AcceptedArgKind::Boolean]
fn get_metadata(&self) -> FunctionMetadata {
FunctionMetadata {
name: "and".to_string(),
description: t!("functions.and.description").to_string(),
category: FunctionCategory::Logical,
min_args: 2,
max_args: usize::MAX,
accepted_arg_ordered_types: vec![
vec![FunctionArgKind::Boolean],
vec![FunctionArgKind::Boolean],
],
remaining_arg_accepted_types: Some(vec![FunctionArgKind::Boolean]),
return_types: vec![FunctionArgKind::Boolean],
}
}

fn invoke(&self, args: &[Value], _context: &Context) -> Result<Value, DscError> {
Expand Down
31 changes: 12 additions & 19 deletions dsc_lib/src/functions/base64.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use base64::{Engine as _, engine::general_purpose};

use crate::DscError;
use crate::configure::context::Context;
use crate::functions::{AcceptedArgKind, FunctionCategory};
use crate::functions::{FunctionArgKind, FunctionCategory, FunctionMetadata};
use rust_i18n::t;
use serde_json::Value;
use super::Function;
Expand All @@ -14,24 +14,17 @@ use super::Function;
pub struct Base64 {}

impl Function for Base64 {
fn description(&self) -> String {
t!("functions.base64.description").to_string()
}

fn category(&self) -> FunctionCategory {
FunctionCategory::String
}

fn accepted_arg_types(&self) -> Vec<AcceptedArgKind> {
vec![AcceptedArgKind::String]
}

fn min_args(&self) -> usize {
1
}

fn max_args(&self) -> usize {
1
fn get_metadata(&self) -> FunctionMetadata {
FunctionMetadata {
name: "base64".to_string(),
description: t!("functions.base64.description").to_string(),
category: FunctionCategory::String,
min_args: 1,
max_args: 1,
accepted_arg_ordered_types: vec![vec![FunctionArgKind::String]],
remaining_arg_accepted_types: None,
return_types: vec![FunctionArgKind::String],
}
}

fn invoke(&self, args: &[Value], _context: &Context) -> Result<Value, DscError> {
Expand Down
31 changes: 12 additions & 19 deletions dsc_lib/src/functions/bool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

use crate::DscError;
use crate::configure::context::Context;
use crate::functions::{AcceptedArgKind, Function, FunctionCategory};
use crate::functions::{FunctionArgKind, Function, FunctionCategory, FunctionMetadata};
use rust_i18n::t;
use serde_json::Value;
use tracing::debug;
Expand All @@ -12,24 +12,17 @@ use tracing::debug;
pub struct Bool {}

impl Function for Bool {
fn description(&self) -> String {
t!("functions.bool.description").to_string()
}

fn category(&self) -> FunctionCategory {
FunctionCategory::Logical
}

fn min_args(&self) -> usize {
1
}

fn max_args(&self) -> usize {
1
}

fn accepted_arg_types(&self) -> Vec<AcceptedArgKind> {
vec![AcceptedArgKind::String, AcceptedArgKind::Number]
fn get_metadata(&self) -> FunctionMetadata {
FunctionMetadata {
name: "bool".to_string(),
description: t!("functions.bool.description").to_string(),
category: FunctionCategory::Logical,
min_args: 1,
max_args: 1,
accepted_arg_ordered_types: vec![vec![FunctionArgKind::String, FunctionArgKind::Number]],
remaining_arg_accepted_types: None,
return_types: vec![FunctionArgKind::Boolean],
}
}

fn invoke(&self, args: &[Value], _context: &Context) -> Result<Value, DscError> {
Expand Down
Loading
Loading