docs: @ExperimentalApi("https://github.com/grpc/grpc-java/issues/1712")
    public static <T> ServerServiceDefinition useMarshalledMessages(
        final ServerServiceDefinition serviceDef,
        final MethodDescriptor.Marshaller<T> marshaller) {
      List<ServerMethodDefinition<?, ?>> wrappedMethods =
          new ArrayList<>();
      List<MethodDescriptor<?, ?>> wrappedDescriptors =
          new ArrayList<>();
      // Wrap the descriptors
      for (final ServerMethodDefinition<?, ?> definition : serviceDef.getMethods()) {
        final MethodDescriptor<?, ?> originalMethodDescriptor = definition.getMethodDescriptor();
        final MethodDescriptor<T, T> wrappedMethodDescriptor =
            originalMethodDescriptor.toBuilder(marshaller, marshaller).build();
        wrappedDescriptors.add(wrappedMethodDescriptor);
        wrappedMethods.add(wrapMethod(definition, wrappedMethodDescriptor));
      }
      // Build the new service descriptor
      final ServerServiceDefinition.Builder serviceBuilder = ServerServiceDefinition
          .builder(new ServiceDescriptor(serviceDef.getServiceDescriptor().getName(),
              wrappedDescriptors));
      // Create the new service definiton.
      for (ServerMethodDefinition<?, ?> definition : wrappedMethods) {
        serviceBuilder.addMethod(definition);
      }
      return serviceBuilder.build();
    }