|
1 | 1 | submodule(vertex_m) vertex_s |
2 | | - use jsonff, only : & |
| 2 | + use rojff, only : & |
| 3 | + fallible_json_member_t, & |
| 4 | + fallible_json_object_t, & |
3 | 5 | fallible_json_string_t, & |
4 | 6 | fallible_json_value_t, & |
5 | 7 | json_array_t, & |
6 | 8 | json_number_t, & |
7 | 9 | json_string_t, & |
8 | 10 | json_integer_t |
9 | | - use erloff, only : error_list_t |
10 | | - use iso_varying_string, only : char, assignment(=) |
| 11 | + use iso_varying_string, only : assignment(=), char |
11 | 12 | use assert_m, only : assert |
12 | 13 | implicit none |
13 | 14 |
|
|
18 | 19 | end procedure |
19 | 20 |
|
20 | 21 | module procedure to_json |
21 | | - integer i |
22 | | - type(json_string_t) :: edges_key, label_key, label_value |
23 | | - type(json_array_t) :: edges_value |
24 | | - type(error_list_t) :: errors |
25 | | - type(fallible_json_string_t) :: maybe_key, maybe_value |
26 | | - |
27 | | - maybe_key = fallible_json_string_t("edges") |
28 | | - errors = maybe_key%errors() |
29 | | - call assert(.not. errors%has_any(), "vertex%to_json (edges key): .not. errors%has_any()", char(errors%to_string())) |
30 | | - edges_key = maybe_key%string() |
31 | | - |
32 | | - if (allocated(self%edges_)) then |
33 | | - do i = lbound(self%edges_, 1), ubound(self%edges_, 1) |
34 | | - call edges_value%append(json_integer_t(self%edges_(i))) |
35 | | - end do |
36 | | - end if |
37 | | - |
38 | | - maybe_key = fallible_json_string_t("label") |
39 | | - errors = maybe_key%errors() |
40 | | - call assert(.not. errors%has_any(), "vertex%to_json (label key): .not. errors%has_any()", char(errors%to_string())) |
41 | | - label_key = maybe_key%string() |
42 | | - |
43 | | - maybe_value = fallible_json_string_t(self%label()) |
44 | | - errors = maybe_value%errors() |
45 | | - call assert(.not. errors%has_any(), "vertex%to_json (label value): .not. errors%has_any()", char(errors%to_string())) |
46 | | - label_value = maybe_value%string() |
47 | | - |
48 | | - |
49 | | - json_object = json_object_t([label_key, edges_key], [json_element_t(label_value), json_element_t(edges_value)]) |
50 | | - |
| 22 | + type(fallible_json_object_t) :: maybe_result |
| 23 | + |
| 24 | + maybe_result = fallible_json_object_t( & |
| 25 | + [ fallible_json_member_t("label", fallible_json_value_t(fallible_json_string_t(self%label_))) & |
| 26 | + , fallible_json_member_t("edges", json_array_t(json_element_t(json_integer_t(self%edges_)))) & |
| 27 | + ]) |
| 28 | + call assert( & |
| 29 | + .not. maybe_result%errors%has_any(), & |
| 30 | + "vertex%to_json: .not. errors%has_any()", & |
| 31 | + char( maybe_result%errors%to_string())) |
| 32 | + json_object = maybe_result%object |
51 | 33 | end procedure |
52 | 34 |
|
53 | 35 | module procedure construct_from_components |
|
68 | 50 | end procedure |
69 | 51 |
|
70 | 52 | module procedure from_json_element |
71 | | - vertex = vertex_t(json_element%value_()) |
| 53 | + vertex = vertex_t(json_element%json) |
72 | 54 | end procedure |
73 | 55 |
|
74 | 56 | module procedure from_json_value |
75 | 57 | select type (json_value) |
76 | 58 | type is (json_object_t) |
77 | 59 | vertex = from_json_object(json_value) |
78 | 60 | class default |
79 | | - call assert(.false., "vertex%from_json_value: vertex was not an object", char(json_value%to_compact_string())) |
| 61 | + call assert(.false., "vertex%from_json_value: vertex was not an object", json_value%to_compact_string()) |
80 | 62 | end select |
81 | 63 | end procedure |
82 | 64 |
|
83 | 65 | module procedure from_json_object |
84 | | - type(error_list_t) :: errors |
85 | | - type(fallible_json_value_t) :: maybe_edge |
86 | 66 | type(fallible_json_value_t) :: maybe_edges |
87 | 67 | integer :: i |
88 | 68 |
|
89 | | - maybe_edges = json_object%get_element("edges") |
90 | | - errors = maybe_edges%errors() |
91 | | - call assert(.not. errors%has_any(), "vertex%from_json: .not. errors%has_any()", char(errors%to_string())) |
92 | | - select type (edges => maybe_edges%value_()) |
| 69 | + maybe_edges = json_object%get("edges") |
| 70 | + call assert( & |
| 71 | + .not. maybe_edges%errors%has_any(), & |
| 72 | + "vertex%from_json: .not. errors%has_any()", & |
| 73 | + char(maybe_edges%errors%to_string())) |
| 74 | + select type (edges => maybe_edges%value_) |
93 | 75 | type is (json_array_t) |
94 | | - allocate(vertex%edges_(edges%length())) |
95 | | - do i = 1, edges%length() |
96 | | - maybe_edge = edges%get_element(i) |
97 | | - errors = maybe_edge%errors() |
98 | | - call assert(.not. errors%has_any(), "vertex%from_json: .not. errors%has_any()", char(errors%to_string())) |
99 | | - select type (edge => maybe_edge%value_()) |
| 76 | + allocate(vertex%edges_(size(edges%elements))) |
| 77 | + do i = 1, size(edges%elements) |
| 78 | + select type (edge => edges%elements(i)%json) |
100 | 79 | type is (json_number_t) |
101 | | - vertex%edges_(i) = int(edge%get_value()) |
| 80 | + vertex%edges_(i) = int(edge%number) |
102 | 81 | type is (json_integer_t) |
103 | | - vertex%edges_(i) = edge%get_value() |
| 82 | + vertex%edges_(i) = edge%number |
104 | 83 | class default |
105 | | - call assert(.false., "vertex%from_json: edge was not a number", char(edge%to_compact_string())) |
| 84 | + call assert(.false., "vertex%from_json: edge was not a number", edge%to_compact_string()) |
106 | 85 | end select |
107 | 86 | end do |
108 | 87 | class default |
109 | | - call assert(.false., "vertex%from_json: edges was not an array", char(edges%to_compact_string())) |
| 88 | + call assert(.false., "vertex%from_json: edges was not an array", edges%to_compact_string()) |
110 | 89 | end select |
111 | 90 | end procedure |
112 | 91 |
|
|
0 commit comments