Thanks, Richard.
As an aside, we don't use Protos under the hood. We rely on language-native types that can be serialized. Java's Serializable may work well here.
Similarly, we don't ask the developer to declare their services as gRPC services. Instead, the developer writes a native class/type and registers it with Service Weaver. For Java, this would be a Java abstract class, with methods declared on it. Each method essentially corresponds to a RPC call.
Service Weaver then needs to inspect the source code, find all of the Java abstract classes that are associated with it, and auto-generate RPC stubs that correspond to those abstract classes' methods.
I wasn't sure if this is something that Java/Kotlin support? Languages like Go and Python allow this level of source code inspection.