001/*
002 * SPDX-FileCopyrightText: none
003 * SPDX-License-Identifier: CC0-1.0
004 */
005
006package dev.metaschema.databind.io;
007
008import dev.metaschema.core.configuration.IConfiguration;
009import dev.metaschema.core.configuration.IMutableConfiguration;
010import dev.metaschema.core.model.IBoundObject;
011import dev.metaschema.databind.model.IBoundDefinitionModelAssembly;
012import edu.umd.cs.findbugs.annotations.NonNull;
013
014/**
015 * The base class of all format-specific serializers.
016 *
017 * @param <CLASS>
018 *          the bound class to serialize from
019 */
020public abstract class AbstractSerializer<CLASS extends IBoundObject>
021    extends AbstractSerializationBase<SerializationFeature<?>>
022    implements ISerializer<CLASS> {
023
024  /**
025   * Construct a new serializer.
026   *
027   * @param definition
028   *          the bound class information for the Java type this serializer is
029   *          operating on
030   */
031  public AbstractSerializer(@NonNull IBoundDefinitionModelAssembly definition) {
032    super(definition);
033  }
034
035  @Override
036  public ISerializer<CLASS> enableFeature(SerializationFeature<?> feature) {
037    return set(feature, true);
038  }
039
040  @Override
041  public ISerializer<CLASS> disableFeature(SerializationFeature<?> feature) {
042    return set(feature, false);
043  }
044
045  @Override
046  public ISerializer<CLASS> applyConfiguration(
047      @NonNull IConfiguration<SerializationFeature<?>> other) {
048    IMutableConfiguration<SerializationFeature<?>> config = getConfiguration();
049    config.applyConfiguration(other);
050    configurationChanged(config);
051    return this;
052  }
053
054  @Override
055  public ISerializer<CLASS> set(SerializationFeature<?> feature, Object value) {
056    IMutableConfiguration<SerializationFeature<?>> config = getConfiguration();
057    config.set(feature, value);
058    configurationChanged(config);
059    return this;
060  }
061}