All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wildfly.clustering.marshalling.protostream.ScalarClass Maven / Gradle / Ivy

/*
 * Copyright The WildFly Authors
 * SPDX-License-Identifier: Apache-2.0
 */

package org.wildfly.clustering.marshalling.protostream;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

import org.infinispan.protostream.BaseMarshaller;
import org.infinispan.protostream.ImmutableSerializationContext;
import org.infinispan.protostream.descriptors.WireType;

/**
 * Set of scalar marshallers for marshalling a {@link Class}.
 * @author Paul Ferraro
 */
public enum ScalarClass implements ScalarMarshaller> {

	ANY(WireType.LENGTH_DELIMITED) {
		@Override
		public Class readFrom(ProtoStreamReader reader) throws IOException {
			return reader.readObject(Class.class);
		}

		@Override
		public void writeTo(ProtoStreamWriter writer, Class value) throws IOException {
			writer.writeObjectNoTag(value);
		}
	},
	ID(WireType.VARINT) {
		@Override
		public Class readFrom(ProtoStreamReader reader) throws IOException {
			int typeId = reader.readUInt32();
			ImmutableSerializationContext context = reader.getSerializationContext();
			String typeName = context.getDescriptorByTypeId(typeId).getFullName();
			BaseMarshaller marshaller = context.getMarshaller(typeName);
			return marshaller.getJavaClass();
		}

		@Override
		public void writeTo(ProtoStreamWriter writer, Class value) throws IOException {
			BaseMarshaller marshaller = writer.findMarshaller(value);
			String typeName = marshaller.getTypeName();
			int typeId = writer.getSerializationContext().getDescriptorByName(typeName).getTypeId();
			writer.writeVarint32(typeId);
		}
	},
	NAME(WireType.LENGTH_DELIMITED) {
		@Override
		public Class readFrom(ProtoStreamReader reader) throws IOException {
			String typeName = StandardCharsets.UTF_8.decode(reader.readByteBuffer()).toString();
			BaseMarshaller marshaller = reader.getSerializationContext().getMarshaller(typeName);
			return marshaller.getJavaClass();
		}

		@Override
		public void writeTo(ProtoStreamWriter writer, Class value) throws IOException {
			BaseMarshaller marshaller = writer.findMarshaller(value);
			String typeName = marshaller.getTypeName();
			Scalar.BYTE_BUFFER.writeTo(writer, StandardCharsets.UTF_8.encode(typeName));
		}
	},
	FIELD(WireType.VARINT) {
		@Override
		public Class readFrom(ProtoStreamReader reader) throws IOException {
			return AnyField.fromIndex(reader.readUInt32() + 1).getMarshaller().getJavaClass();
		}

		@Override
		public void writeTo(ProtoStreamWriter writer, Class value) throws IOException {
			writer.writeVarint32(AnyField.fromJavaType(value).getIndex() - 1);
		}
	},
	;
	private final WireType wireType;

	ScalarClass(WireType wireType) {
		this.wireType = wireType;
	}

	@SuppressWarnings("unchecked")
	@Override
	public Class> getJavaClass() {
		return (Class>) (Class) Class.class;
	}

	@Override
	public WireType getWireType() {
		return this.wireType;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy