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}