package tc.oc.api.message;
import com.google.inject.Binder;
import com.google.inject.Key;
import com.google.inject.binder.LinkedBindingBuilder;
import com.google.inject.multibindings.Multibinder;
public class MessageBinder {
private final Multibinder<MessageMeta<?>> messages;
public MessageBinder(Binder binder) {
this.messages = Multibinder.newSetBinder(binder, new Key<MessageMeta<?>>(){});
}
public LinkedBindingBuilder<MessageMeta<?>> addBinding() {
return messages.addBinding();
}
public <T extends Message> void register(Class<T> type, String name) {
addBinding().toInstance(new MessageMeta<>(type, name));
}
public <T extends Message> void register(Class<T> type) {
register(type, type.getSimpleName());
}
}