private static boolean isSupportedType(Type type) {
        type = unwrapUnaryAsyncType(type);
        if (type instanceof Class) {
            return MessageLite.class.isAssignableFrom((Class<?>) type);
        }

        if (type instanceof ParameterizedType) {
            final ParameterizedType parameterizedType = (ParameterizedType) type;
            final Class<?> rawType = (Class<?>) parameterizedType.getRawType();

            if (Iterable.class.isAssignableFrom(rawType) || Stream.class.isAssignableFrom(rawType) ||
                Publisher.class.isAssignableFrom(rawType)) {
                final Type actualTypeArgument = parameterizedType.getActualTypeArguments()[0];
                if (!(actualTypeArgument instanceof Class)) {
                    return false;
                }
                return Message.class.isAssignableFrom((Class<?>) actualTypeArgument);
            } else if (Map.class.isAssignableFrom(rawType)) {
                final Type actualTypeArgument = parameterizedType.getActualTypeArguments()[1];
                if (!(actualTypeArgument instanceof Class)) {
                    return false;
                }
                return Message.class.isAssignableFrom((Class<?>) actualTypeArgument);
            }
        }

        return false;
    }
Returns {@code true} if the specified {@link Type} can be handled by the
{@link ProtobufResponseConverterFunction}.
protobuf/src/main/java/com/linecorp/armeria/server/protobuf/ProtobufResponseConverterFunctionProvider.java