DeploymentTargetConverter.java
package com.cloudforge.core.config;
import com.cloudforge.core.local.DeploymentTarget;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
/**
* Jackson serializer/deserializer for {@link DeploymentTarget}, overriding {@link DeploymentConfig
* #createMapper()}'s {@code WRITE_ENUMS_USING_TO_STRING}/{@code READ_ENUMS_USING_TO_STRING}
* defaults for this one type. Those features fall back to the plain enum's {@code toString()} —
* {@code name()}, upper-case — but every other place this codebase writes or reads a target
* ({@code CFC_MANAGER_TARGET}, deployment history, {@code DeploymentTargetId}) uses {@link
* DeploymentTarget#configKey()}'s lower-case wire format. Without this, {@code toContextMap()}/
* {@code toHistoryContextMap()} would emit {@code "AWS"} instead of {@code "aws"} — a real
* mismatch, not a style nit.
*/
public class DeploymentTargetConverter {
private DeploymentTargetConverter() {}
public static class Serializer extends JsonSerializer<DeploymentTarget> {
@Override
public void serialize(DeploymentTarget value, JsonGenerator gen, SerializerProvider serializers)
throws IOException {
gen.writeString(value.configKey());
}
}
public static class Deserializer extends JsonDeserializer<DeploymentTarget> {
@Override
public DeploymentTarget deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return DeploymentTarget.fromConfigKey(p.getValueAsString());
}
}
}