X-Git-Url: http://nitlanguage.org diff --git a/lib/neo4j/graph/json_graph_store.nit b/lib/neo4j/graph/json_graph_store.nit index 618a1d3..d924bd9 100644 --- a/lib/neo4j/graph/json_graph_store.nit +++ b/lib/neo4j/graph/json_graph_store.nit @@ -191,35 +191,25 @@ redef class NeoGraph end end - redef fun to_json do return to_json_by_append - - # Append the JSON representation of `self` to the specified buffer. - # - # For a description of the format, see `JsonGraphStore`. - # - # SEE: `to_json` - redef fun append_json(b) do - b.append "\{\"nodes\":[" - append_entities_json(nodes, b) - b.append "],\"edges\":[" - append_entities_json(edges, b) - b.append "]\}" + redef fun accept_json_serializer(v) do + v.stream.write "\{\"nodes\":[" + append_entities_json(nodes, v) + v.stream.write "],\"edges\":[" + append_entities_json(edges, v) + v.stream.write "]\}" end # Encode `self` in JSON. # # For a description of the format, see `JsonGraphStore`. - # - # SEE: `append_json` - private fun append_entities_json(entities: Collection[NeoEntity], - b: Buffer) do + private fun append_entities_json(entities: Collection[NeoEntity], v: JsonSerializer) do var i = entities.iterator if i.is_ok then - i.item.append_json_for(self, b) + i.item.append_json_for(self, v) i.next for entity in i do - b.add ',' - entity.append_json_for(self, b) + v.stream.write "," + entity.append_json_for(self, v) end end end @@ -233,7 +223,7 @@ end redef class NeoEntity # Append the JSON representation of the entity to the specified buffer. - fun append_json_for(graph: NeoGraph, buffer: Buffer) is abstract + fun append_json_for(graph: NeoGraph, v: JsonSerializer) is abstract end # Make `NeoNode` `Jsonable`. @@ -273,32 +263,27 @@ redef class NeoNode properties.add_all(json_properties) end - redef fun to_json do return to_json_by_append - - # Append the JSON representation of the node to the specified buffer. - # - # SEE: `JsonGraph` - redef fun append_json(b) do - b.append "\{\"labels\":[" + redef fun accept_json_serializer(v) do + v.stream.write "\{\"labels\":[" var i = labels.iterator if i.is_ok then - i.item.append_json(b) + i.item.serialize_to v i.next for lab in i do - b.add ',' - lab.append_json(b) + v.stream.write "," + lab.serialize_to v end end - b.append "],\"properties\":" - properties.append_json(b) - b.add '}' + v.stream.write "],\"properties\":" + properties.serialize_to v + v.stream.write "}" end redef fun to_s do return to_json # Append the JSON representation of the node to the specified buffer. - redef fun append_json_for(graph, buffer) do - append_json(buffer) + redef fun append_json_for(graph, v) do + accept_json_serializer v end end @@ -307,15 +292,15 @@ redef class NeoEdge # Append the JSON representation of the relationship to the specified buffer. # # Use the IDs specfied by `graph.nodes`. - redef fun append_json_for(graph, buffer) do - buffer.append "\{\"type\":" - rel_type.as(not null).append_json(buffer) - buffer.append ",\"properties\":" - properties.append_json(buffer) - buffer.append ",\"from\":" - graph.nodes.id_of(from).append_json(buffer) - buffer.append ",\"to\":" - graph.nodes.id_of(to).append_json(buffer) - buffer.append "}" + redef fun append_json_for(graph, v) do + v.stream.write "\{\"type\":" + rel_type.as(not null).serialize_to(v) + v.stream.write ",\"properties\":" + properties.serialize_to(v) + v.stream.write ",\"from\":" + graph.nodes.id_of(from).serialize_to(v) + v.stream.write ",\"to\":" + graph.nodes.id_of(to).serialize_to(v) + v.stream.write "}" end end