Rename module; Implement collection commands

This commit is contained in:
Jeff 2023-08-23 01:21:02 -04:00
parent 26a71585f0
commit 350fbb701d
16 changed files with 17 additions and 20 deletions

View File

@ -59,7 +59,7 @@ impl Macro for String {
identifier: "string", identifier: "string",
description: "Stringify a value.", description: "Stringify a value.",
group: "collections", group: "collections",
inputs: vec![], inputs: vec![ValueType::Any],
} }
} }
@ -89,13 +89,13 @@ impl Macro for Count {
identifier: "count", identifier: "count",
description: "Return the number of items in a value.", description: "Return the number of items in a value.",
group: "collections", group: "collections",
inputs: vec![], inputs: vec![ValueType::Any],
} }
} }
fn run(&self, argument: &Value) -> Result<Value> { fn run(&self, argument: &Value) -> Result<Value> {
let len = match argument { let len = match argument {
Value::String(string) => string.len(), Value::String(string) => string.chars().count(),
Value::List(list) => list.len(), Value::List(list) => list.len(),
Value::Map(map) => map.len(), Value::Map(map) => map.len(),
Value::Table(table) => table.len(), Value::Table(table) => table.len(),
@ -119,7 +119,7 @@ impl Macro for CreateTable {
identifier: "create_table", identifier: "create_table",
description: "Define a new table with a list of column names and list of rows.", description: "Define a new table with a list of column names and list of rows.",
group: "collections", group: "collections",
inputs: vec![], inputs: vec![ValueType::ListOf(vec![ValueType::List, ValueType::List])],
} }
} }
@ -155,7 +155,7 @@ impl Macro for Rows {
identifier: "rows", identifier: "rows",
description: "Extract a table's rows as a list.", description: "Extract a table's rows as a list.",
group: "collections", group: "collections",
inputs: vec![], inputs: vec![ValueType::Table],
} }
} }
@ -213,13 +213,13 @@ impl Macro for Insert {
identifier: "insert", identifier: "insert",
description: "Add new rows to a table.", description: "Add new rows to a table.",
group: "collections", group: "collections",
inputs: vec![], inputs: vec![ValueType::Table, ValueType::List],
} }
} }
fn run(&self, argument: &Value) -> Result<Value> { fn run(&self, argument: &Value) -> Result<Value> {
let argument = argument.as_list()?; let argument = argument.as_list()?;
let new_rows = &argument[1..]; let new_rows = argument[1].as_list()?;
let mut table = argument[0].as_table()?.clone(); let mut table = argument[0].as_table()?.clone();
table.reserve(new_rows.len()); table.reserve(new_rows.len());
@ -242,7 +242,7 @@ impl Macro for Select {
identifier: "select", identifier: "select",
description: "Extract one or more values based on their key.", description: "Extract one or more values based on their key.",
group: "collections", group: "collections",
inputs: vec![], inputs: vec![ValueType::Table, ValueType::String],
} }
} }

View File

@ -1,13 +1,10 @@
//! This module contains whale's built-in macro system. Every macro is listed //! This module contains dust's built-in commands.
//! alphabetically. Use [call_macro] to check an identifier against every macro.
//! //!
//! ## Writing macros //! ## Writing macros
//! //!
//! - snake case identifier, this is enforced by a test //! - snake case identifier, this is enforced by a test
//! - the type name should be the identifier in upper camel case
//! - always verify user input, this creates helpful errors
//! - the description should be brief, it will display in the shell //! - the description should be brief, it will display in the shell
//! - maintain alphabetical order //!
//! //!
//! ## Usage //! ## Usage
//! //!

View File

@ -2,9 +2,9 @@
#![forbid(unsafe_code)] #![forbid(unsafe_code)]
pub use crate::{ pub use crate::{
commands::*,
error::*, error::*,
interface::*, interface::*,
macros::*,
operator::Operator, operator::Operator,
token::PartialToken, token::PartialToken,
tree::Node, tree::Node,
@ -14,9 +14,9 @@ pub use crate::{
}, },
}; };
mod commands;
mod error; mod error;
mod interface; mod interface;
mod macros;
mod operator; mod operator;
mod token; mod token;
mod tree; mod tree;

View File

@ -16,7 +16,7 @@ test_table = create_table (
) )
); );
assert_equal(table:select("text", "bool"), test_table); assert_equal(select(table, "text", "bool"), test_table);
test_table = create_table( test_table = create_table(
("text", "number", "bool"), ("text", "number", "bool"),
@ -26,4 +26,4 @@ test_table = create_table (
) )
); );
assert_equal(table:where('text == "a"'), test_table); assert_equal(where(table, 'text == "a"'), test_table);