Skip to content

Commit

Permalink
fix!(slice): array type def
Browse files Browse the repository at this point in the history
  • Loading branch information
pront committed Jan 31, 2025
1 parent f66533c commit ebf8fce
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 7 deletions.
3 changes: 1 addition & 2 deletions lib/tests/tests/functions/slice_typedef.vrl
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# result: { "array": { }, "array_unknown_infinite": { "object": { "foo": { "object": { "a": { "bytes": true, "integer": true } } } }, "undefined": true } }

# result: { "array": { "0": { "object": { "foo": { "object": { "a": { "integer": true } } } } }, "1": { "object": { "foo": { "object": { "a": { "bytes": true } } } } } } }

a = []
a[0] = {"foo": {"a": 1}}
Expand Down
27 changes: 22 additions & 5 deletions src/stdlib/slice.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ impl FunctionExpression for SliceFn {

match self.value.type_def(state) {
v if v.is_bytes() => td.union(v),
v if v.is_array() => td.union(v).collect_subtypes(),
v if v.is_array() => td.union(v),
_ => td.or_bytes().or_array(Collection::any()),
}
}
Expand All @@ -137,6 +137,7 @@ impl FunctionExpression for SliceFn {
#[cfg(test)]
mod tests {
use crate::value;
use std::collections::BTreeMap;

use super::*;

Expand Down Expand Up @@ -232,31 +233,47 @@ mod tests {
start: 0
],
want: Ok(vec![0, 1, 2]),
tdef: TypeDef::array(Collection::from_unknown(Kind::integer())).fallible(),
tdef: TypeDef::array(Collection::from_parts(BTreeMap::from([
(Index::from(0), Kind::integer()),
(Index::from(1), Kind::integer()),
(Index::from(2), Kind::integer()),
]), Kind::undefined())).fallible(),
}

array_1 {
args: func_args![value: vec![0, 1, 2],
start: 1
],
want: Ok(vec![1, 2]),
tdef: TypeDef::array(Collection::from_unknown(Kind::integer())).fallible(),
tdef: TypeDef::array(Collection::from_parts(BTreeMap::from([
(Index::from(0), Kind::integer()),
(Index::from(1), Kind::integer()),
(Index::from(2), Kind::integer()),
]), Kind::undefined())).fallible(),
}

array_minus_2 {
args: func_args![value: vec![0, 1, 2],
start: -2
],
want: Ok(vec![1, 2]),
tdef: TypeDef::array(Collection::from_unknown(Kind::integer())).fallible(),
tdef: TypeDef::array(Collection::from_parts(BTreeMap::from([
(Index::from(0), Kind::integer()),
(Index::from(1), Kind::integer()),
(Index::from(2), Kind::integer()),
]), Kind::undefined())).fallible(),
}

array_mixed_types {
args: func_args![value: value!([0, "ook", true]),
start: 1
],
want: Ok(value!(["ook", true])),
tdef: TypeDef::array(Collection::from_unknown(Kind::integer().or_bytes().or_boolean())).fallible(),
tdef: TypeDef::array(Collection::from_parts(BTreeMap::from([
(Index::from(0), Kind::integer()),
(Index::from(1), Kind::bytes()),
(Index::from(2), Kind::boolean()),
]), Kind::undefined())).fallible(),
}

error_after_end {
Expand Down

0 comments on commit ebf8fce

Please sign in to comment.