docs: def json(self):
          """ returns a dict that represents a NetJSON NetworkGraph object """
          nodes = []
          links = []
  
          for link in self.link_set.all():
              if self.is_layer2:
                  source = link.interface_a.mac
                  destination = link.interface_b.mac
              else:
                  source = str(link.interface_a.ip_set.first().address)
                  destination = str(link.interface_b.ip_set.first().address)
              nodes.append({
                  'id': source
              })
              nodes.append({
                  'id': destination
              })
              links.append(OrderedDict((
                  ('source', source),
                  ('target', destination),
                  ('cost', link.metric_value)
              )))
  
          return OrderedDict((
              ('type', 'NetworkGraph'),
              ('protocol', self.parser.protocol),
              ('version', self.parser.version),
              ('metric', self.parser.metric),
              ('nodes', nodes),
              ('links', links)
          ))