Pure-Pharo unary gRPC client with HTTP/2 transport
# grpc-pharo `grpc-pharo` is a pure-Pharo gRPC client library. Current scope: - client-side only - unary RPC only - protobuf payloads - HTTP/2 transport - request framing - response parsing - metadata headers - trailers handling - `grpc-status` / `grpc-message` - deadline / timeout header support - optional gzip request framing support This project exists to provide a small, reusable gRPC transport for Pharo without depending on native `libgrpc` bindings. ## Status This is early but real software. It is already good enough to back OpenTelemetry OTLP/gRPC trace export and related unary gRPC integrations. It is not yet a full general-purpose gRPC implementation. Not supported yet: - server support - client / server / bidi streaming - resolver / load balancer / service config machinery - generated stubs ## Packages - `GRPC-Core`: request, response, metadata, status, endpoint, transport, unary call - `GRPC-HTTP2`: pure-Pharo HTTP/2 transport and HPACK support - `GRPC-Tests`: focused unit tests ## Loading ```smalltalk Metacello new baseline: 'GRPC'; repository: 'github://Gabriel-Darbord/grpc-pharo:main/src'; load. ``` To load tests too: ```smalltalk Metacello new baseline: 'GRPC'; repository: 'github://Gabriel-Darbord/grpc-pharo:main/src'; load: 'all'. ``` ## Example ```smalltalk | endpoint request channel response | endpoint := GRPCEndpoint fromString: 'http://127.0.0.1:4317'. request := GRPCRequest service: 'opentelemetry.proto.collector.trace.v1.TraceService' method: 'Export' payload: #[ ]. channel := GRPCChannel endpoint: endpoint transport: GRPCHTTP2Transport new. response := channel executeUnaryRequest: request. response status isOk. ```