Change from_json to return an error rather than print it.

This commit is contained in:
Steve Smoot 2025-04-23 15:56:12 -07:00
parent 8054547712
commit 9ef579b09e
25 changed files with 24 additions and 36 deletions

View file

@ -1477,6 +1477,7 @@ function from_json_default_key_mapper(s: string): string
type from_json_result: record {
v: any &optional; ##< Parsed value.
valid: bool; ##< True if parsing was successful.
err: string &optional; ## Error string if unsuccessful.
};
# TCP values for :zeek:see:`endpoint` *state* field.

View file

@ -5240,7 +5240,7 @@ function to_json%(val: any, only_loggable: bool &default=F, field_escape_pattern
## when keys are not valid field identifiers, or represent reserved
## keywords like **port** or **type**.
##
## returns: A value of type t.
## returns: A record either contining a value of type t as field v with valid=T or valid=F and err contains the error.
##
## .. zeek:see:: to_json
function from_json%(s: string, t: any, key_func: string_mapper &default=from_json_default_key_mapper%): from_json_result
@ -5276,7 +5276,7 @@ function from_json%(s: string, t: any, key_func: string_mapper &default=from_jso
else
{
rval->Assign(valid_idx, false);
zeek::emit_builtin_error(res.error().c_str());
rval->Assign(result_type->FieldOffset("err"), res.error().c_str());
}
return std::move(rval);

View file

@ -2,5 +2,5 @@
[v={
fe80::/64,
192.168.0.0/16
}, valid=T]
[v=[1, 3, 4], valid=T]
}, valid=T, err=<uninitialized>]
[v=[1, 3, 4], valid=T, err=<uninitialized>]

View file

@ -1,3 +1 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error in <...>/from_json.zeek, line 8: required field Foo$hello is missing in JSON (from_json({"t":null}, to_any_coerce Foo, from_json_default_key_mapper))
error in <...>/from_json.zeek, line 9: required field Foo$hello is null in JSON (from_json({"hello": null, "t": true}, to_any_coerce Foo, from_json_default_key_mapper))

View file

@ -1,3 +1,3 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
[v=<uninitialized>, valid=F]
[v=<uninitialized>, valid=F]
[v=<uninitialized>, valid=F, err=required field Foo$hello is missing in JSON]
[v=<uninitialized>, valid=F, err=required field Foo$hello is null in JSON]

View file

@ -1,2 +1,2 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
[v=[hello=Hello!], valid=T]
[v=[hello=Hello!], valid=T, err=<uninitialized>]

View file

@ -1,2 +1 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error in <...>/from_json.zeek, line 7: required field Foo$id_field is missing in JSON (from_json({"id-field": "Hello!"}, to_any_coerce Foo, from_json_default_key_mapper))

View file

@ -1,3 +1,3 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
[v=<uninitialized>, valid=F]
[v=[id_field=Hello!], valid=T]
[v=<uninitialized>, valid=F, err=required field Foo$id_field is missing in JSON]
[v=[id_field=Hello!], valid=T, err=<uninitialized>]

View file

@ -1,2 +1,2 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
[v=<uninitialized>, valid=F]
[v=<uninitialized>, valid=F, err=<uninitialized>]

View file

@ -1,2 +1 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error in <...>/from_json.zeek, line 4: JSON parse error: Missing a closing quotation mark in string. Offset: 5 (from_json({"hel, to_any_coerce string_vec, from_json_default_key_mapper))

View file

@ -1,2 +1,2 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
[v=<uninitialized>, valid=F]
[v=<uninitialized>, valid=F, err=JSON parse error: Missing a closing quotation mark in string. Offset: 5]

View file

@ -1,3 +1 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error in <...>/from_json.zeek, line 9: cannot convert JSON type 'array' to Zeek type 'bool' (from_json([], to_any_coerce bool_t, from_json_default_key_mapper))
error in <...>/from_json.zeek, line 10: cannot convert JSON type 'string' to Zeek type 'bool' (from_json({"a": "hello"}, to_any_coerce Foo, from_json_default_key_mapper))

View file

@ -1,3 +1,3 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
[v=<uninitialized>, valid=F]
[v=<uninitialized>, valid=F]
[v=<uninitialized>, valid=F, err=cannot convert JSON type 'array' to Zeek type 'bool']
[v=<uninitialized>, valid=F, err=cannot convert JSON type 'string' to Zeek type 'bool']

View file

@ -1,2 +1 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error in <...>/from_json.zeek, line 4: cannot convert JSON type 'array' to Zeek type 'table' (from_json([], to_any_coerce table_string_of_string, from_json_default_key_mapper))

View file

@ -1,2 +1,2 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
[v=<uninitialized>, valid=F]
[v=<uninitialized>, valid=F, err=cannot convert JSON type 'array' to Zeek type 'table']

View file

@ -1,3 +1 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error in <...>/from_json.zeek, line 8: wrong port format, string must be <...>/(tcp|udp|icmp|unknown)/ (from_json("80", to_any_coerce port_t, from_json_default_key_mapper))
error in <...>/from_json.zeek, line 9: wrong port format, object must have 'port' and 'proto' members (from_json({}, to_any_coerce port_t, from_json_default_key_mapper))

View file

@ -1,4 +1,4 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
[v=80/tcp, valid=T]
[v=<uninitialized>, valid=F]
[v=<uninitialized>, valid=F]
[v=80/tcp, valid=T, err=<uninitialized>]
[v=<uninitialized>, valid=F, err=wrong port format, string must be /[0-9]{1,5}\/(tcp|udp|icmp|unknown)/]
[v=<uninitialized>, valid=F, err=wrong port format, object must have 'port' and 'proto' members]

View file

@ -1,3 +1 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error in <...>/from_json.zeek, line 5: index type doesn't match (from_json([[1, false], [2]], to_any_coerce set_t, from_json_default_key_mapper))
error in <...>/from_json.zeek, line 6: cannot convert JSON type 'number' to Zeek type 'bool' (from_json([[1, false], [2, 1]], to_any_coerce set_t, from_json_default_key_mapper))

View file

@ -1,3 +1,3 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
[v=<uninitialized>, valid=F]
[v=<uninitialized>, valid=F]
[v=<uninitialized>, valid=F, err=index type doesn't match]
[v=<uninitialized>, valid=F, err=cannot convert JSON type 'number' to Zeek type 'bool']

View file

@ -1,3 +1,2 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error: error compiling pattern /^?(.|\n)*(([[:print:]]{-}[[:alnum:]]foo))/
error in <...>/from_json.zeek, line 5: error compiling pattern (from_json("/([[:print:]]{-}[[:alnum:]]foo)/", to_any_coerce pattern_t, from_json_default_key_mapper))

View file

@ -1,2 +1,2 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
[v=<uninitialized>, valid=F]
[v=<uninitialized>, valid=F, err=error compiling pattern]

View file

@ -1,2 +1 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error in <...>/from_json.zeek, line 7: 'Yellow' is not a valid enum for 'Color'. (from_json("Yellow", to_any_coerce Color, from_json_default_key_mapper))

View file

@ -1,2 +1,2 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
[v=<uninitialized>, valid=F]
[v=<uninitialized>, valid=F, err='Yellow' is not a valid enum for 'Color'.]

View file

@ -7,4 +7,4 @@ aa:bb::/32,
[2001:db8::1, 8080/udp]
}, tbl={
[192.168.0.1, 80/tcp] = foo
}], valid=T]
}], valid=T, err=<uninitialized>]

View file

@ -1,5 +1,5 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
[v=aoeu, valid=T]
[v=aoeu, valid=T, err=<uninitialized>]
type
double
vector of int