package org.infinispan.marshaller.protostuff; import java.io.IOException; import java.util.concurrent.atomic.AtomicInteger; import org.infinispan.marshaller.test.User; import io.protostuff.Input; import io.protostuff.Output; import io.protostuff.Schema; import io.protostuff.UninitializedMessageException; /** * @author Ryan Emerson * @since 9.0 */ class UserSchema implements Schema<User> { static final AtomicInteger mergeFromCount = new AtomicInteger(); static final AtomicInteger writeToCount = new AtomicInteger(); @Override public String getFieldName(int number) { return number == 1 ? "name" : null; } @Override public int getFieldNumber(String name) { return name.equals("name") ? 1 : 0; } @Override public boolean isInitialized(User user) { return user.getName() != null; } @Override public User newMessage() { return new User(null); } @Override public String messageName() { return User.class.getSimpleName(); } @Override public String messageFullName() { return User.class.getName(); } @Override public Class<? super User> typeClass() { return User.class; } @Override public void mergeFrom(Input input, User user) throws IOException { while (true) { int fieldNumber = input.readFieldNumber(this); switch (fieldNumber) { case 0: return; case 1: mergeFromCount.incrementAndGet(); user.setName(input.readString()); break; default: input.handleUnknownField(fieldNumber, this); } } } @Override public void writeTo(Output output, User user) throws IOException { if (!this.isInitialized(user)) throw new UninitializedMessageException(user, this); output.writeString(1, user.getName(), false); writeToCount.incrementAndGet(); } }