Skip to content

Instantly share code, notes, and snippets.

@akihisa-shimada
Created August 24, 2023 10:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save akihisa-shimada/9071f0bfe6d12c51943c3c2d7cb347c1 to your computer and use it in GitHub Desktop.
Save akihisa-shimada/9071f0bfe6d12c51943c3c2d7cb347c1 to your computer and use it in GitHub Desktop.
package com.example.proto.grpc.exception.message;
import com.google.protobuf.Message;
import com.google.rpc.LocalizedMessage;
/**
* エラーメッセージの詳細を扱います
*/
public interface DetailMessage {
/**
* メッセージを返却します
*
* @return protobuf message class
*/
Message getMessage();
/**
* protobufのメッセージを直接扱います
*/
class RawMessage implements DetailMessage {
Message message;
RawMessage(Message message) {
this.message = message;
}
@Override
public Message getMessage() {
return message;
}
}
/**
* テンプレート化されたメッセージを扱います
*/
interface TemplateMessage extends DetailMessage {
Message getMessage(MessageResolver messageResolver);
@Override
default Message getMessage() {
throw new UnsupportedOperationException("Unsupported the retrieval of raw message.");
}
/**
* テンプレート化されたLocalizedMessageを扱います
*/
class LocalizedMessageTemplateMessage implements TemplateMessage {
String templateMessage;
Object[] parameters;
LocalizedMessageTemplateMessage(String templateMessage, Object... parameters) {
this.templateMessage = templateMessage;
this.parameters = parameters;
}
@Override
public Message getMessage(MessageResolver messageResolver) {
return LocalizedMessage.newBuilder()
.setLocale(messageResolver.getLocale().toString())
.setMessage(messageResolver.getMessage(templateMessage, parameters))
.build();
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment