Hi there 👋 . I've been working this week on trying to write a minimal client for gRPC over protobuf. I am basically sympathetic to https://clojurians.slack.com/archives/C03RZGPG3/p1698925169349009?thread_ts=1698878682.581489&cid=C03RZGPG3, but I need to consume just this one endpoint, and I'm trying to do it without bloating our little project or writing too much java-in-Clojure. Yesterday I came upon @cheewah.seetoh's lovely https://github.com/s-expresso/clojobuf library, which is exactly what I've been looking for on the protobuf side. Now I just need something to send that encoding over the wire. Protojure mostly shows the way https://github.com/protojure/lib/blob/master/modules/grpc-client/src/protojure/internal/grpc/client/providers/http2/core.clj#L38 and https://github.com/protojure/lib/blob/master/modules/grpc-client/src/protojure/internal/grpc/client/providers/http2/jetty.clj#L240, but I'm not positive how well it works without protojure's codegen, partly because some sort of jdk issues keep it from working for me. That's on jetty though. It'd be nice to do a netty-based implementation, which definitely should work since the official grpc-java client is netty-based. Our little project already uses aleph. We're on 0.70-alpha, so the http/2 support is there. Does anyone know if aleph might or might not be suitable for such a client? I did see https://github.com/clj-commons/aleph/issues/543 as a potential blocker, but I'm not sure.
Well, @arnaudgeiser is the one to talk to re grpc and protobuf. But as far as that linked issue goes, it's only an obstacle if you have to (or really, really want to_)_ use Netty handlers. If you don't mind calling your transformation code at the end of your Clojure handler, there should be no problem. I took a quick look, and it seems that while grpc-java uses Netty, it's not designed as a Netty handler, so I'm not sure you could use it as that even if you wanted to.
I added the branch I had in progress back then. If it appears to be what you need, I can try to find some time to reach the finish line.