27
27
-export ([ add_to_path /2
28
28
, get_allowed_errors /1
29
29
, get_external_validator /1
30
+ , get_current_value /1
30
31
, get_current_path /1
31
32
, get_current_schema /1
32
33
, get_current_schema_id /1
37
38
, remove_last_from_path /1
38
39
, set_allowed_errors /2
39
40
, set_current_schema /2
41
+ , set_value /3
40
42
, set_error_list /2
41
43
, resolve_ref /2
42
44
, undo_resolve_ref /2
55
57
, { allowed_errors :: jesse :allowed_errors ()
56
58
, current_path :: current_path ()
57
59
, current_schema :: jesse :schema ()
60
+ , current_value :: jesse :json_term ()
58
61
, default_schema_ver :: jesse :schema_ver ()
59
62
, error_handler :: jesse :error_handler ()
60
63
, error_list :: jesse :error_list ()
61
64
, external_validator :: jesse :external_validator ()
62
65
, id :: jesse :schema_id ()
63
66
, root_schema :: jesse :schema ()
64
67
, schema_loader_fun :: jesse :schema_loader_fun ()
68
+ , setter_fun :: jesse :setter_fun ()
65
69
}
66
70
).
67
71
@@ -146,6 +150,9 @@ new(JsonSchema, Options) ->
146
150
, Options
147
151
, ? default_schema_loader_fun
148
152
),
153
+ SetterFun = proplists :get_value ( setter_fun
154
+ , Options
155
+ ),
149
156
NewState = # state { root_schema = JsonSchema
150
157
, current_path = []
151
158
, allowed_errors = AllowedErrors
@@ -154,6 +161,7 @@ new(JsonSchema, Options) ->
154
161
, default_schema_ver = DefaultSchemaVer
155
162
, schema_loader_fun = LoaderFun
156
163
, external_validator = ExternalValidator
164
+ , setter_fun = SetterFun
157
165
},
158
166
set_current_schema (NewState , JsonSchema ).
159
167
@@ -392,3 +400,19 @@ load_schema(#state{schema_loader_fun = LoaderFun}, SchemaURI) ->
392
400
% % @private
393
401
get_external_validator (# state {external_validator = Fun }) ->
394
402
Fun .
403
+
404
+ % % @doc Getter for `current_value'.
405
+ -spec get_current_value (State :: state ()) -> jesse :json_term ().
406
+ get_current_value (# state {current_value = Value }) ->
407
+ Value .
408
+
409
+ -spec set_value (State :: state (), jesse :path (), jesse :json_term ()) -> state ().
410
+ set_value (# state {setter_fun = undefined }= State , _Path , _Value ) -> State ;
411
+ set_value (# state {current_value = undefined }= State , _Path , _Value ) -> State ;
412
+ set_value ( # state { setter_fun = Setter
413
+ , current_value = Value
414
+ } = State
415
+ , Path
416
+ , NewValue
417
+ ) ->
418
+ State # state {current_value = Setter (Path , NewValue , Value )}.
0 commit comments