/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ package dev.plexapi.sdk.models.operations; import com.fasterxml.jackson.core.JacksonException; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import com.fasterxml.jackson.databind.ser.std.StdSerializer; import java.io.IOException; import java.lang.Override; import java.lang.String; import java.lang.SuppressWarnings; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Objects; import java.util.Optional; /** *

Wrapper class for an "open" enum. "Open" enums are those that are expected * to evolve (particularly with the addition of enum members over time). If an * open enum is used then the appearance of unexpected enum values (say in a * response from an updated an API) will not bring about a runtime error thus * ensuring that non-updated client versions can continue to work without error. * *

Note that instances are immutable and are singletons (an internal thread-safe * cache is maintained to ensure that). As a consequence instances created with the * same value will satisfy reference equality (via {@code ==}). * *

This class is intended to emulate an enum (in terms of common usage and with * reference equality) but with the ability to carry unknown values. Unfortunately * Java does not permit the use of an instance in a switch expression but you can * use the {@code asEnum()} method (after dealing with the `Optional` appropriately). * */ /** * State * *

The state of the media item */ @JsonDeserialize(using = State._Deserializer.class) @JsonSerialize(using = State._Serializer.class) public class State { public static final State PLAYING = new State("playing"); public static final State PAUSED = new State("paused"); public static final State STOPPED = new State("stopped"); // This map will grow whenever a Color gets created with a new // unrecognized value (a potential memory leak if the user is not // careful). Keep this field lower case to avoid clashing with // generated member names which will always be upper cased (Java // convention) private static final Map values = createValuesMap(); private static final Map enums = createEnumsMap(); private final String value; private State(String value) { this.value = value; } /** * Returns a State with the given value. For a specific value the * returned object will always be a singleton so reference equality * is satisfied when the values are the same. * * @param value value to be wrapped as State */ public static State of(String value) { synchronized (State.class) { return values.computeIfAbsent(value, v -> new State(v)); } } public String value() { return value; } public Optional asEnum() { return Optional.ofNullable(enums.getOrDefault(value, null)); } public boolean isKnown() { return asEnum().isPresent(); } @Override public int hashCode() { return Objects.hash(value); } @Override public boolean equals(java.lang.Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; State other = (State) obj; return Objects.equals(value, other.value); } @Override public String toString() { return "State [value=" + value + "]"; } // return an array just like an enum public static State[] values() { synchronized (State.class) { return values.values().toArray(new State[] {}); } } private static final Map createValuesMap() { Map map = new LinkedHashMap<>(); map.put("playing", PLAYING); map.put("paused", PAUSED); map.put("stopped", STOPPED); return map; } private static final Map createEnumsMap() { Map map = new HashMap<>(); map.put("playing", StateEnum.PLAYING); map.put("paused", StateEnum.PAUSED); map.put("stopped", StateEnum.STOPPED); return map; } @SuppressWarnings("serial") public static final class _Serializer extends StdSerializer { protected _Serializer() { super(State.class); } @Override public void serialize(State value, JsonGenerator g, SerializerProvider provider) throws IOException, JsonProcessingException { g.writeObject(value.value); } } @SuppressWarnings("serial") public static final class _Deserializer extends StdDeserializer { protected _Deserializer() { super(State.class); } @Override public State deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException { String v = p.readValueAs(new TypeReference() {}); // use the factory method to ensure we get singletons return State.of(v); } } public enum StateEnum { PLAYING("playing"), PAUSED("paused"), STOPPED("stopped"),; private final String value; private StateEnum(String value) { this.value = value; } public String value() { return value; } } }