///|
fn main raise {
  let graph = @graphml.Graph::new(@graphml.Undirected, id="network")
  let switch = @graphml.Node::new("switch")
  switch.ports.push(@graphml.Port::new("eth0"))
  let server = @graphml.Node::new("server")
  server.ports.push(@graphml.Port::new("eth0"))
  graph.nodes.append([switch, server])
  graph.edges.push(
    @graphml.Edge::new(
      "switch",
      "server",
      source_port="eth0",
      target_port="eth0",
    ),
  )
  let vlan = @graphml.Hyperedge::new(id="vlan")
  vlan.endpoints.append([
    @graphml.Endpoint::new("switch", port="eth0"),
    @graphml.Endpoint::new("server", port="eth0"),
  ])
  graph.hyperedges.push(vlan)
  let document = try! @graphml.Document::new([], [graph])
  let renamed = try! document.rename_port(0, "server", "eth0", "lan0")
  assert_eq(renamed.graphs()[0].hyperedges[0].endpoints[1].port, Some("lan0"))
  println(try! @graphml.serialize(renamed))
}