package net.onrc.onos.core.topology.serializers;

import java.io.IOException;

import net.onrc.onos.core.topology.Link;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.SerializerProvider;
import org.codehaus.jackson.map.ser.std.SerializerBase;
import org.openflow.util.HexString;

public class LinkSerializer extends SerializerBase<Link> {

    public LinkSerializer() {
        super(Link.class);
    }

    @Override
    public void serialize(Link link, JsonGenerator jsonGenerator,
                          SerializerProvider serializerProvider)
            throws IOException, JsonGenerationException {
        jsonGenerator.writeStartObject();
        jsonGenerator.writeStringField("src-switch",
                HexString.toHexString(link.getSrcSwitch().getDpid()));
        jsonGenerator.writeNumberField("src-port",
                link.getSrcPort().getNumber());
        jsonGenerator.writeStringField("dst-switch",
                HexString.toHexString(link.getDstSwitch().getDpid()));
        jsonGenerator.writeNumberField("dst-port",
                link.getDstPort().getNumber());
        jsonGenerator.writeEndObject();
    }

}
