Skip to content

Commit 6df3fda

Browse files
updated documentation and merged with newer version
2 parents 25cc3e4 + 4dd39a8 commit 6df3fda

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+1512
-1095
lines changed

.github/workflows/test-and-release.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ jobs:
8787
with:
8888
submodules: recursive
8989
- name: Install Buf
90-
uses: bufbuild/buf-setup-action@v1.4.0
90+
uses: bufbuild/buf-setup-action@v1.5.0
9191
- name: Install Rust
9292
uses: actions-rs/toolchain@v1
9393
with:
@@ -135,7 +135,7 @@ jobs:
135135
with:
136136
cache-on-failure: true
137137
- name: Run e2e tests
138-
run: scripts/tests.e2e.sh 1.7.11
138+
run: scripts/tests.e2e.sh 1.7.13
139139

140140
release:
141141
name: Release ${{ matrix.job.target }} (${{ matrix.job.os }})

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Generated by Cargo
22
# will have compiled files and executables
33
/mini-kvvm/target/
4-
/proto/target/
4+
crates/avalanche-proto/target/
55
/target
66

77
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries

.gitmodules

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[submodule "proto/protos/avalanchego"]
2-
path = proto/protos/avalanchego
2+
path = crates/avalanche-proto/protos/avalanchego
33
url = https://github.com/ava-labs/avalanchego.git
44
[submodule "proto/protos/avalanche-network-runner"]
5-
path = proto/protos/avalanche-network-runner
5+
path = crates/avalanche-proto/protos/avalanche-network-runner
66
url = https://github.com/ava-labs/avalanche-network-runner

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[workspace]
22
members = [
33
"mini-kvvm",
4-
"proto",
4+
"crates/avalanche-proto",
55
"tests/e2e"
66
]

proto/Cargo.toml renamed to crates/avalanche-proto/Cargo.toml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
[package]
22
name = "avalanche-proto"
3-
version = "0.0.1"
3+
version = "0.15.0"
44
edition = "2021"
55
rust-version = "1.61"
6-
publish = false
6+
publish = true
77
description = "Protobuf generated client and server resources for Avalanche gRPC in rust"
88
license = "BSD-3-Clause"
99
homepage = "https://avax.network"
@@ -16,6 +16,7 @@ aliasreader = []
1616
appsender = ["google_protobuf"]
1717
google_api = []
1818
google_protobuf = []
19+
helloworld = []
1920
http = []
2021
http_responsewriter = ["http","google_protobuf"]
2122
io_prometheus_client = []
@@ -37,6 +38,14 @@ chrono = "0.4.19"
3738
prost = "0.10.4"
3839
tonic = { version = "0.7", features = ["compression"] }
3940

41+
[dev-dependencies]
42+
avalanche-proto = { path = "./", features = ["helloworld"] }
43+
tokio = { version = "1.19.1", features = ["fs", "rt-multi-thread"] }
44+
tokio-stream = { version = "0.1.9", features = ["net"] }
45+
tonic = { version = "0.7", features = ["compression"] }
46+
tonic-health = "0.6"
47+
tonic-reflection = "0.4.0"
48+
4049
[build-dependencies]
4150
protoc-gen-prost = "0.1.3"
4251
protoc-gen-tonic = "0.1.0"
File renamed without changes.

crates/avalanche-proto/README.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
2+
# avalanche-proto
3+
4+
Protobuf generated client and server resources for Avalanche gRPC in rust.
5+
The generated stubs use the upstream [avalanchego/proto](https://github.com/ava-labs/avalanchego-internal/tree/dev/proto)
6+
definitions as the source of truth and versioning will align with avalanchego releases.
7+
8+
## versions
9+
10+
Support for avalanchego protocol version 15+
11+
12+
The release version will align with the [protocol version](https://github.com/ava-labs/avalanchego/blob/v1.7.13/vms/rpcchainvm/vm.go#L21)
13+
for avalanchego. In our example linked above avalanchego is currently on protocol version 15.
14+
This aligns with the minor version of the avalanche-proto release. Patches to minor releases
15+
could include improvements and even features for protos not releated to avalanchego.
16+
17+
```bash
18+
avalanche-types = { version = "0.15", features = [] } // supports avalanchego protocol version 15
19+
```
20+
21+
## usage
22+
23+
```rust
24+
use avalanche_proto::{
25+
http::{
26+
http_server::Http,
27+
HttpRequest, HandleSimpleHttpResponse, HandleSimpleHttpRequest
28+
},
29+
google::protobuf::Empty,
30+
};
31+
```
32+
33+
```rust
34+
use avalanche_proto::grpcutil;
35+
36+
grpcutil::default_server()
37+
.add_service(VmServer::new(vm))
38+
.serve_with_incoming(TcpListenerStream::new(listener))
39+
.await
40+
.map_err(|e| {
41+
Error::new(
42+
ErrorKind::Other,
43+
format!("failed to serve vm service: {}", e),
44+
)
45+
})
46+
```
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use avalanche_proto::helloworld::{greeter_client::GreeterClient, HelloRequest};
2+
3+
#[tokio::main]
4+
async fn main() -> Result<(), Box<dyn std::error::Error>> {
5+
let mut client = GreeterClient::connect("http://[::1]:50051").await?;
6+
let request = tonic::Request::new(HelloRequest {
7+
name: "Avalanche Rustaceans!".into(),
8+
});
9+
let response = client.say_hello(request).await?;
10+
11+
println!("response: {:?}", response);
12+
Ok(())
13+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
use avalanche_proto::{
2+
grpcutil,
3+
helloworld::{
4+
self,
5+
greeter_server::{Greeter, GreeterServer},
6+
HelloReply, HelloRequest,
7+
},
8+
};
9+
use tokio::runtime::Runtime;
10+
use tonic::{Request, Response, Status};
11+
12+
#[derive(Default)]
13+
struct MyGreeter;
14+
15+
#[tonic::async_trait]
16+
impl Greeter for MyGreeter {
17+
async fn say_hello(
18+
&self,
19+
request: Request<HelloRequest>,
20+
) -> Result<Response<HelloReply>, Status> {
21+
println!("Got a request from {:?}", request.remote_addr());
22+
23+
let reply = HelloReply {
24+
message: format!("Hello {}!", request.into_inner().name),
25+
};
26+
Ok(Response::new(reply))
27+
}
28+
}
29+
30+
fn main() {
31+
let addr = "[::1]:50051".parse().unwrap();
32+
println!("Server listening on {}", addr);
33+
34+
// ref. https://github.com/hyperium/tonic/blob/v0.7.2/examples/src/reflection/server.rs
35+
let reflection_service = tonic_reflection::server::Builder::configure()
36+
.register_encoded_file_descriptor_set(helloworld::FILE_DESCRIPTOR_SET)
37+
.build()
38+
.expect("failed to create gRPC reflection service");
39+
let greeter = MyGreeter::default();
40+
41+
let runtime = Runtime::new().expect("failed to create runtime");
42+
43+
let server = grpcutil::default_server()
44+
.add_service(reflection_service)
45+
.add_service(GreeterServer::new(greeter))
46+
.serve(addr);
47+
48+
runtime.block_on(server).expect("runtime failed");
49+
}
Submodule avalanchego added at acd0750
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright 2015 gRPC authors.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
syntax = "proto3";
16+
17+
package helloworld;
18+
19+
// The greeting service definition.
20+
service Greeter {
21+
// Sends a greeting
22+
rpc SayHello (HelloRequest) returns (HelloReply) {}
23+
}
24+
25+
// The request message containing the user's name.
26+
message HelloRequest {
27+
string name = 1;
28+
}
29+
30+
// The response message containing the greetings
31+
message HelloReply {
32+
string message = 1;
33+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
2+
#!/usr/bin/env bash
3+
set -xue
4+
5+
if ! [[ "$0" =~ ./scripts/examples.sh ]]; then
6+
echo "must be run from repository root"
7+
exit 255
8+
fi
9+
10+
# cleanup port
11+
fuser -k 50051/tcp || true
12+
13+
cargo run --example server &
14+
sleep 1
15+
cargo run --example client
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
// @generated
2+
/// The request message containing the user's name.
3+
#[derive(Clone, PartialEq, ::prost::Message)]
4+
pub struct HelloRequest {
5+
#[prost(string, tag="1")]
6+
pub name: ::prost::alloc::string::String,
7+
}
8+
/// The response message containing the greetings
9+
#[derive(Clone, PartialEq, ::prost::Message)]
10+
pub struct HelloReply {
11+
#[prost(string, tag="1")]
12+
pub message: ::prost::alloc::string::String,
13+
}
14+
/// Encoded file descriptor set for the `helloworld` package
15+
pub const FILE_DESCRIPTOR_SET: &[u8] = &[
16+
0x0a, 0xa8, 0x09, 0x0a, 0x1b, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2f,
17+
0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
18+
0x12, 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x22, 0x22, 0x0a, 0x0c,
19+
0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04,
20+
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
21+
0x22, 0x26, 0x0a, 0x0a, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18,
22+
0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
23+
0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x49, 0x0a, 0x07, 0x47, 0x72, 0x65, 0x65,
24+
0x74, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x08, 0x53, 0x61, 0x79, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x12,
25+
0x18, 0x2e, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x48, 0x65, 0x6c,
26+
0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x68, 0x65, 0x6c, 0x6c,
27+
0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c,
28+
0x79, 0x22, 0x00, 0x4a, 0xdd, 0x07, 0x0a, 0x06, 0x12, 0x04, 0x0e, 0x00, 0x20, 0x01, 0x0a, 0xbf,
29+
0x04, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x0e, 0x00, 0x12, 0x32, 0xb4, 0x04, 0x20, 0x43, 0x6f, 0x70,
30+
0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x31, 0x35, 0x20, 0x67, 0x52, 0x50, 0x43,
31+
0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x4c, 0x69, 0x63, 0x65,
32+
0x6e, 0x73, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41,
33+
0x70, 0x61, 0x63, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x56,
34+
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x2e, 0x30, 0x20, 0x28, 0x74, 0x68, 0x65, 0x20,
35+
0x22, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x3b, 0x0a, 0x20, 0x79, 0x6f, 0x75,
36+
0x20, 0x6d, 0x61, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69,
37+
0x73, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x69, 0x6e,
38+
0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68,
39+
0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x20, 0x59,
40+
0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x6f, 0x62, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x20,
41+
0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65,
42+
0x6e, 0x73, 0x65, 0x20, 0x61, 0x74, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x74, 0x74,
43+
0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f,
44+
0x72, 0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x2f, 0x4c, 0x49, 0x43, 0x45,
45+
0x4e, 0x53, 0x45, 0x2d, 0x32, 0x2e, 0x30, 0x0a, 0x0a, 0x20, 0x55, 0x6e, 0x6c, 0x65, 0x73, 0x73,
46+
0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x70, 0x70,
47+
0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6c, 0x61, 0x77, 0x20, 0x6f, 0x72, 0x20, 0x61,
48+
0x67, 0x72, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x72, 0x69, 0x74,
49+
0x69, 0x6e, 0x67, 0x2c, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0a, 0x20, 0x64,
50+
0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72,
51+
0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x69, 0x73, 0x20,
52+
0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61,
53+
0x6e, 0x20, 0x22, 0x41, 0x53, 0x20, 0x49, 0x53, 0x22, 0x20, 0x42, 0x41, 0x53, 0x49, 0x53, 0x2c,
54+
0x0a, 0x20, 0x57, 0x49, 0x54, 0x48, 0x4f, 0x55, 0x54, 0x20, 0x57, 0x41, 0x52, 0x52, 0x41, 0x4e,
55+
0x54, 0x49, 0x45, 0x53, 0x20, 0x4f, 0x52, 0x20, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f,
56+
0x4e, 0x53, 0x20, 0x4f, 0x46, 0x20, 0x41, 0x4e, 0x59, 0x20, 0x4b, 0x49, 0x4e, 0x44, 0x2c, 0x20,
57+
0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f,
58+
0x72, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x2e, 0x0a, 0x20, 0x53, 0x65, 0x65, 0x20,
59+
0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20,
60+
0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x6c, 0x61, 0x6e,
61+
0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20,
62+
0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x0a,
63+
0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x75, 0x6e, 0x64,
64+
0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x0a,
65+
0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x10, 0x00, 0x13, 0x0a, 0x2e, 0x0a, 0x02, 0x06, 0x00,
66+
0x12, 0x04, 0x13, 0x00, 0x16, 0x01, 0x1a, 0x22, 0x20, 0x54, 0x68, 0x65, 0x20, 0x67, 0x72, 0x65,
67+
0x65, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65,
68+
0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x06, 0x00,
69+
0x01, 0x12, 0x03, 0x13, 0x08, 0x0f, 0x0a, 0x1f, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x00, 0x12, 0x03,
70+
0x15, 0x02, 0x35, 0x1a, 0x12, 0x20, 0x53, 0x65, 0x6e, 0x64, 0x73, 0x20, 0x61, 0x20, 0x67, 0x72,
71+
0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x01,
72+
0x12, 0x03, 0x15, 0x06, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03,
73+
0x15, 0x10, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x15, 0x27,
74+
0x31, 0x0a, 0x3d, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x19, 0x00, 0x1b, 0x01, 0x1a, 0x31, 0x20,
75+
0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73,
76+
0x61, 0x67, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74,
77+
0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x27, 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x0a,
78+
0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x19, 0x08, 0x14, 0x0a, 0x0b, 0x0a, 0x04,
79+
0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x1a, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02,
80+
0x00, 0x05, 0x12, 0x03, 0x1a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01,
81+
0x12, 0x03, 0x1a, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03,
82+
0x1a, 0x10, 0x11, 0x0a, 0x3b, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x1e, 0x00, 0x20, 0x01, 0x1a,
83+
0x2f, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d,
84+
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e,
85+
0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x0a,
86+
0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x1e, 0x08, 0x12, 0x0a, 0x0b, 0x0a, 0x04,
87+
0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x1f, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02,
88+
0x00, 0x05, 0x12, 0x03, 0x1f, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01,
89+
0x12, 0x03, 0x1f, 0x09, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03,
90+
0x1f, 0x13, 0x14, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
91+
];
92+
include!("helloworld.tonic.rs");
93+
// @@protoc_insertion_point(module)

0 commit comments

Comments
 (0)