Skip to content

Commit 1c7a7a9

Browse files
committed
[WIP] Generate C# bindings
Just experimenting! Signed-off-by: James Taylor <[email protected]>
1 parent f257e2a commit 1c7a7a9

File tree

5 files changed

+145
-13
lines changed

5 files changed

+145
-13
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@
1515
/bindings/go-apiv2/**/*.pb.go
1616
/bindings/java/src
1717
/bindings/node/src
18+
/bindings/csharp/src

Makefile

+23-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ PROTOC_GEN_GRPC_JAVA_VERSION := 1.63.0
3737
PROTOC_GEN_JS_VERSION := 3.21.2
3838
GRPC_TOOLS_VERSION := 1.12.4
3939
TS_PROTOC_GEN_VERSION := 0.15.0
40+
GRPC_CSHARP_PLUGIN_VERSION := 2.64.0
4041

4142
# This is the commit hash for the https://github.com/googleapis/googleapis repo
4243
GRPC_STATUS_VERSION := f36c65081b19e0758ef5696feca27c7dcee5475e
@@ -215,6 +216,27 @@ $(TS_PROTOC_GEN):
215216
@mkdir -p $(dir $(TS_PROTOC_GEN))
216217
@touch $(TS_PROTOC_GEN)
217218

219+
# GRPC_CSHARP_PLUGIN points to the marker file for the installed version.
220+
#
221+
# If GRPC_CSHARP_PLUGIN_VERSION is changed, the binary will be re-downloaded.
222+
#
223+
# TODO: no arm mac version
224+
GRPC_CSHARP_PLUGIN := $(CACHE_VERSIONS)/grpc_csharp_plugin/$(GRPC_CSHARP_PLUGIN_VERSION)
225+
$(GRPC_CSHARP_PLUGIN):
226+
@rm -f $(CACHE_BIN)/grpc_csharp_plugin
227+
@mkdir -p $(CACHE_BIN)
228+
$(eval GRPC_CSHARP_PLUGIN_TMP := $(shell mktemp -d))
229+
curl -sSL \
230+
"https://www.nuget.org/api/v2/package/Grpc.Tools/$(GRPC_CSHARP_PLUGIN_VERSION)" \
231+
-o "$(GRPC_CSHARP_PLUGIN_TMP)/grpc.tools.$(GRPC_CSHARP_PLUGIN_VERSION).nupkg"
232+
unzip -o "$(GRPC_CSHARP_PLUGIN_TMP)/grpc.tools.$(GRPC_CSHARP_PLUGIN_VERSION).nupkg" -d "$(GRPC_CSHARP_PLUGIN_TMP)" tools/macosx_x64/grpc_csharp_plugin
233+
mv "$(GRPC_CSHARP_PLUGIN_TMP)/tools/macosx_x64/grpc_csharp_plugin" "$(CACHE_BIN)"
234+
chmod +x "$(CACHE_BIN)/grpc_csharp_plugin"
235+
@rm -rf $(GRPC_CSHARP_PLUGIN_TMP)
236+
@rm -rf $(dir $(GRPC_CSHARP_PLUGIN))
237+
@mkdir -p $(dir $(GRPC_CSHARP_PLUGIN))
238+
@touch $(GRPC_CSHARP_PLUGIN)
239+
218240
.DEFAULT_GOAL := all
219241

220242
.PHONY: all
@@ -223,7 +245,7 @@ all: lint javabindings nodebindings
223245
# deps allows us to install deps without running any checks.
224246

225247
.PHONY: deps
226-
deps: $(BUF) $(PROTOC) $(PROTOC_GEN_DOC) $(PROTOC_GEN_GO) $(PROTOC_GEN_GO_GRPC) $(PROTOC_GEN_GRPC_JAVA) $(PROTOC_GEN_JS) $(GRPC_TOOLS) $(TS_PROTOC_GEN)
248+
deps: $(BUF) $(PROTOC) $(PROTOC_GEN_DOC) $(PROTOC_GEN_GO) $(PROTOC_GEN_GO_GRPC) $(PROTOC_GEN_GRPC_JAVA) $(PROTOC_GEN_JS) $(GRPC_TOOLS) $(TS_PROTOC_GEN) $(GRPC_CSHARP_PLUGIN)
227249

228250
.PHONY: lint
229251
lint: https

bindings/csharp/NuGet.Config

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<configuration>
3+
<packageSources>
4+
<!--To inherit the global NuGet package sources remove the <clear/> line below -->
5+
<clear />
6+
<add key="NuGet.org (v3)" value="https://api.nuget.org/v3/index.json" />
7+
</packageSources>
8+
</configuration>

bindings/csharp/README.md

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# fabric-protos
2+
3+
C# bindings for [Hyperledger Fabric protocol buffers](https://github.com/hyperledger/fabric-protos)
4+
5+
## Usage
6+
7+
TBC

buf.gen.yaml

+106-12
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ version: v2
22
managed:
33
enabled: true
44
override:
5+
- file_option: csharp_namespace_prefix
6+
value: Hyperledger.Fabric.Protos
57
- file_option: java_multiple_files
68
value: true
79
- file_option: java_package_prefix
@@ -11,97 +13,189 @@ managed:
1113
- file_option: java_outer_classname
1214
path: common/configtx.proto
1315
value: ConfigTxProto
16+
- file_option: csharp_namespace
17+
path: ledger/queryresult/kv_query_result.proto
18+
value: Hyperledger.Fabric.Protos.Ledger.QueryResult
1419
- file_option: java_outer_classname
1520
path: ledger/queryresult/kv_query_result.proto
1621
value: KVQueryResultProto
22+
- file_option: java_package
23+
path: ledger/queryresult/kv_query_result.proto
24+
value: org.hyperledger.fabric.protos.ledger.queryresult
25+
- file_option: csharp_namespace
26+
path: ledger/rwset/kvrwset/kv_rwset.proto
27+
value: Hyperledger.Fabric.Protos.Ledger.RWSet.KVRWSet
1728
- file_option: java_outer_classname
1829
path: ledger/rwset/kvrwset/kv_rwset.proto
1930
value: KVRWSetProto
31+
- file_option: java_package
32+
path: ledger/rwset/kvrwset/kv_rwset.proto
33+
value: org.hyperledger.fabric.protos.ledger.rwset.kvrwset
34+
- file_option: csharp_namespace
35+
path: ledger/rwset/rwset.proto
36+
value: Hyperledger.Fabric.Protos.Ledger.RWSet
2037
- file_option: java_outer_classname
2138
path: ledger/rwset/rwset.proto
2239
value: RWSetProto
40+
- file_option: java_package
41+
path: ledger/rwset/rwset.proto
42+
value: org.hyperledger.fabric.protos.ledger.rwset
43+
- file_option: csharp_namespace
44+
path: msp/identities.proto
45+
value: Hyperledger.Fabric.Protos.MSP
46+
- file_option: csharp_namespace
47+
path: msp/msp_config.proto
48+
value: Hyperledger.Fabric.Protos.MSP
2349
- file_option: java_outer_classname
2450
path: msp/msp_config.proto
2551
value: MSPConfigProto
2652
- file_option: java_outer_classname
2753
path: msp/msp_principal.proto
2854
value: MSPPrincipalProto
29-
- file_option: java_package
30-
path: google/rpc/status.proto
31-
value: com.google.rpc
32-
- file_option: java_package
33-
path: ledger/queryresult/kv_query_result.proto
34-
value: org.hyperledger.fabric.protos.ledger.queryresult
35-
- file_option: java_package
36-
path: ledger/rwset/kvrwset/kv_rwset.proto
37-
value: org.hyperledger.fabric.protos.ledger.rwset.kvrwset
38-
- file_option: java_package
39-
path: ledger/rwset/rwset.proto
40-
value: org.hyperledger.fabric.protos.ledger.rwset
4155
- file_option: java_package
4256
path: msp/msp_principal.proto
4357
value: org.hyperledger.fabric.protos.common
58+
- file_option: csharp_namespace
59+
path: google/rpc/status.proto
60+
value: Google.Rpc
61+
- file_option: java_package
62+
path: google/rpc/status.proto
63+
value: com.google.rpc
64+
- file_option: csharp_namespace
65+
path: orderer/etcdraft/configuration.proto
66+
value: Hyperledger.Fabric.Protos.Orderer.EtcdRaft
4467
- file_option: java_package
4568
path: orderer/etcdraft/configuration.proto
4669
value: org.hyperledger.fabric.protos.orderer.etcdraft
70+
- file_option: csharp_namespace
71+
path: orderer/etcdraft/metadata.proto
72+
value: Hyperledger.Fabric.Protos.Orderer.EtcdRaft
4773
- file_option: java_package
4874
path: orderer/etcdraft/metadata.proto
4975
value: org.hyperledger.fabric.protos.orderer.etcdraft
76+
- file_option: csharp_namespace
77+
path: orderer/smartbft/configuration.proto
78+
value: Hyperledger.Fabric.Protos.Orderer.SmartBFT
79+
- file_option: csharp_namespace
80+
path: peer/chaincode.proto
81+
value: Hyperledger.Fabric.Protos.Peer
5082
- file_option: java_package
5183
path: peer/chaincode.proto
5284
value: org.hyperledger.fabric.protos.peer
85+
- file_option: csharp_namespace
86+
path: peer/chaincode_event.proto
87+
value: Hyperledger.Fabric.Protos.Peer
5388
- file_option: java_package
5489
path: peer/chaincode_event.proto
5590
value: org.hyperledger.fabric.protos.peer
91+
- file_option: csharp_namespace
92+
path: peer/chaincode_shim.proto
93+
value: Hyperledger.Fabric.Protos.Peer
5694
- file_option: java_package
5795
path: peer/chaincode_shim.proto
5896
value: org.hyperledger.fabric.protos.peer
97+
- file_option: csharp_namespace
98+
path: peer/collection.proto
99+
value: Hyperledger.Fabric.Protos.Peer
59100
- file_option: java_package
60101
path: peer/collection.proto
61102
value: org.hyperledger.fabric.protos.peer
103+
- file_option: csharp_namespace
104+
path: peer/configuration.proto
105+
value: Hyperledger.Fabric.Protos.Peer
62106
- file_option: java_package
63107
path: peer/configuration.proto
64108
value: org.hyperledger.fabric.protos.peer
109+
- file_option: csharp_namespace
110+
path: peer/events.proto
111+
value: Hyperledger.Fabric.Protos.Peer
65112
- file_option: java_package
66113
path: peer/events.proto
67114
value: org.hyperledger.fabric.protos.peer
115+
- file_option: csharp_namespace
116+
path: peer/lifecycle/chaincode_definition.proto
117+
value: Hyperledger.Fabric.Protos.Peer.Lifecycle
68118
- file_option: java_package
69119
path: peer/lifecycle/chaincode_definition.proto
70120
value: org.hyperledger.fabric.protos.peer.lifecycle
121+
- file_option: csharp_namespace
122+
path: peer/lifecycle/db.proto
123+
value: Hyperledger.Fabric.Protos.Peer.Lifecycle
71124
- file_option: java_package
72125
path: peer/lifecycle/db.proto
73126
value: org.hyperledger.fabric.protos.peer.lifecycle
127+
- file_option: csharp_namespace
128+
path: peer/lifecycle/lifecycle.proto
129+
value: Hyperledger.Fabric.Protos.Peer.Lifecycle
74130
- file_option: java_package
75131
path: peer/lifecycle/lifecycle.proto
76132
value: org.hyperledger.fabric.protos.peer.lifecycle
133+
- file_option: csharp_namespace
134+
path: peer/peer.proto
135+
value: Hyperledger.Fabric.Protos.Peer
77136
- file_option: java_package
78137
path: peer/peer.proto
79138
value: org.hyperledger.fabric.protos.peer
139+
- file_option: csharp_namespace
140+
path: peer/policy.proto
141+
value: Hyperledger.Fabric.Protos.Peer
80142
- file_option: java_package
81143
path: peer/policy.proto
82144
value: org.hyperledger.fabric.protos.peer
145+
- file_option: csharp_namespace
146+
path: peer/proposal.proto
147+
value: Hyperledger.Fabric.Protos.Peer
83148
- file_option: java_package
84149
path: peer/proposal.proto
85150
value: org.hyperledger.fabric.protos.peer
151+
- file_option: csharp_namespace
152+
path: peer/proposal_response.proto
153+
value: Hyperledger.Fabric.Protos.Peer
86154
- file_option: java_package
87155
path: peer/proposal_response.proto
88156
value: org.hyperledger.fabric.protos.peer
157+
- file_option: csharp_namespace
158+
path: peer/query.proto
159+
value: Hyperledger.Fabric.Protos.Peer
89160
- file_option: java_package
90161
path: peer/query.proto
91162
value: org.hyperledger.fabric.protos.peer
163+
- file_option: csharp_namespace
164+
path: peer/resources.proto
165+
value: Hyperledger.Fabric.Protos.Peer
92166
- file_option: java_package
93167
path: peer/resources.proto
94168
value: org.hyperledger.fabric.protos.peer
169+
- file_option: csharp_namespace
170+
path: peer/signed_cc_dep_spec.proto
171+
value: Hyperledger.Fabric.Protos.Peer
95172
- file_option: java_package
96173
path: peer/signed_cc_dep_spec.proto
97174
value: org.hyperledger.fabric.protos.peer
175+
- file_option: csharp_namespace
176+
path: peer/snapshot.proto
177+
value: Hyperledger.Fabric.Protos.Peer
98178
- file_option: java_package
99179
path: peer/snapshot.proto
100180
value: org.hyperledger.fabric.protos.peer
181+
- file_option: csharp_namespace
182+
path: peer/transaction.proto
183+
value: Hyperledger.Fabric.Protos.Peer
101184
- file_option: java_package
102185
path: peer/transaction.proto
103186
value: org.hyperledger.fabric.protos.peer
187+
- file_option: csharp_namespace
188+
path: transientstore/transientstore.proto
189+
value: Hyperledger.Fabric.Protos.TransientStore
104190
plugins:
191+
- protoc_builtin: csharp
192+
out: bindings/csharp/src
193+
opt:
194+
- base_namespace=
195+
- local: grpc_csharp_plugin
196+
out: bindings/csharp/src
197+
opt:
198+
- base_namespace=
105199
- local: protoc-gen-doc
106200
out: docs
107201
opt:

0 commit comments

Comments
 (0)