feat(buildGo): Add support for gRPC packages

Introduces buildGo.grpc which is like buildGo.proto, but adds
dependencies on the gRPC libraries.
This commit is contained in:
Vincent Ambo 2019-11-26 12:16:27 +00:00
parent d3e8774a8e
commit 9280cf9715

View file

@ -72,17 +72,20 @@ let
'') // { goDeps = uniqueDeps; }; '') // { goDeps = uniqueDeps; };
# Build a Go library out of the specified protobuf definition. # Build a Go library out of the specified protobuf definition.
proto = { name, proto, path ? name, protocFlags ? "", extraDeps ? [] }: package { proto = { name, proto, path ? name, extraDeps ? [] }: package {
inherit name path; inherit name path;
deps = [ goProto ] ++ extraDeps; deps = [ protoLibs.goProto ] ++ extraDeps;
srcs = lib.singleton (runCommand "goproto-${name}.pb.go" {} '' srcs = lib.singleton (runCommand "goproto-${name}.pb.go" {} ''
cp ${proto} ${baseNameOf proto} cp ${proto} ${baseNameOf proto}
${protobuf}/bin/protoc --plugin=${goProto}/bin/protoc-gen-go \ ${protobuf}/bin/protoc --plugin=${protoLibs.goProto}/bin/protoc-gen-go \
--go_out=${protocFlags}import_path=${baseNameOf path}:. ${baseNameOf proto} --go_out=plugins=grpc,import_path=${baseNameOf path}:. ${baseNameOf proto}
mv *.pb.go $out mv *.pb.go $out
''); '');
}; };
# Build a Go library out of the specified gRPC definition.
grpc = args: proto (args // { extraDeps = [ protoLibs.goGrpc ]; });
# Build an externally defined Go library using `go build` itself. # Build an externally defined Go library using `go build` itself.
# #
# Libraries built this way can be included in any standard buildGo # Libraries built this way can be included in any standard buildGo
@ -128,5 +131,5 @@ let
}; };
in { in {
# Only the high-level builder functions are exposed # Only the high-level builder functions are exposed
inherit program package proto external; inherit program package proto grpc external;
} }