ObjectConverterImpl.java
package space.sunqian.common.object.convert;
import space.sunqian.annotations.Nonnull;
import space.sunqian.annotations.Nullable;
import space.sunqian.annotations.RetainedParam;
import space.sunqian.common.FsLoader;
import space.sunqian.common.base.option.Option;
import space.sunqian.common.object.convert.handlers.AssignableConvertHandler;
import space.sunqian.common.object.convert.handlers.CommonConvertHandler;
import java.lang.reflect.Type;
import java.util.List;
final class ObjectConverterImpl implements ObjectConverter, ObjectConverter.Handler {
static final @Nonnull ObjectConverterImpl DEFAULT = new ObjectConverterImpl(FsLoader.loadInstances(
FsLoader.loadClassByDependent(
"space.sunqian.common.third.protobuf.ProtobufConvertHandler",
"com.google.protobuf.Message"
),
new AssignableConvertHandler(),
new CommonConvertHandler()
));
private final @Nonnull List<ObjectConverter.@Nonnull Handler> handlers;
ObjectConverterImpl(@RetainedParam List<ObjectConverter.@Nonnull Handler> handlers) {
this.handlers = handlers;
}
@Override
public @Nonnull List<@Nonnull Handler> handlers() {
return handlers;
}
@Override
public @Nonnull Handler asHandler() {
return this;
}
@Override
public Object convert(
@Nullable Object src,
@Nonnull Type srcType,
@Nonnull Type target,
@Nonnull ObjectConverter converter,
@Nonnull Option<?, ?> @Nonnull ... options
) throws Exception {
try {
return convert(src, srcType, target, options);
} catch (UnsupportedObjectConvertException e) {
return Status.HANDLER_CONTINUE;
}
}
}