Example demonstrating Service compilation error.
This commit is contained in:
commit
666fd9f4f5
|
@ -0,0 +1,5 @@
|
||||||
|
node_modules/
|
||||||
|
target/
|
||||||
|
dist/
|
||||||
|
static/
|
||||||
|
pkg/
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,24 @@
|
||||||
|
[package]
|
||||||
|
name = "service-trait-example"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["projectmoon <projectmoon@agnos.is>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
tonic-build = { git = "https://github.com/hyperium/tonic", branch = "master", default_features = false, features = ["prost"] }
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
yew = { version = "0.17", default_features = false }#features = [ "agent", "web-sys" ] }
|
||||||
|
yewtil = {version = "0.3" }
|
||||||
|
yew-router = {version = "0.14", default_features = false }
|
||||||
|
yewdux = {version = "^0.6", default_features = false }
|
||||||
|
wasm-bindgen = { version = "0.2", default-features = false, features = ["serde-serialize"] }
|
||||||
|
grpc-web-client = "0.1"
|
||||||
|
prost = { version = "0.7.0", default-features = false }
|
||||||
|
tonic = { git = "https://github.com/hyperium/tonic", branch = "master", default-features = false, features = ["codegen", "prost"] }
|
|
@ -0,0 +1,7 @@
|
||||||
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
tonic_build::configure()
|
||||||
|
.build_server(false)
|
||||||
|
.compile(&["../protos/hello.proto"], &["../protos/"])?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
use grpc_web_client::Client as GrpcWebClient;
|
||||||
|
|
||||||
|
tonic::include_proto!("hello");
|
||||||
|
|
||||||
|
use crate::grpc::hello_world_client::HelloWorldClient;
|
||||||
|
|
||||||
|
async fn test_grpc_web() {
|
||||||
|
let client = GrpcWebClient::new("http://localhost:10000".to_string());
|
||||||
|
let mut client = HelloWorldClient::new(client);
|
||||||
|
|
||||||
|
let request = tonic::Request::new(HelloRequest {
|
||||||
|
name: "WebTonic".into(),
|
||||||
|
});
|
||||||
|
|
||||||
|
let response = client.say_hello(request).await.unwrap().into_inner();
|
||||||
|
println!("Hello reply: {:?}", response);
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
use yew::prelude::*;
|
||||||
|
|
||||||
|
pub mod grpc;
|
||||||
|
|
||||||
|
struct App;
|
||||||
|
|
||||||
|
impl Component for App {
|
||||||
|
type Message = ();
|
||||||
|
type Properties = ();
|
||||||
|
|
||||||
|
fn create(_: Self::Properties, _link: ComponentLink<Self>) -> Self {
|
||||||
|
Self
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update(&mut self, _: Self::Message) -> ShouldRender {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
fn change(&mut self, _: Self::Properties) -> ShouldRender {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
fn view(&self) -> Html {
|
||||||
|
html! {
|
||||||
|
<div>
|
||||||
|
{"Hello World"}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen(start)]
|
||||||
|
pub fn run_app() {
|
||||||
|
yew::start_app::<App>();
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
//The wasm application is compiled as javascript into the /pkg
|
||||||
|
//directory. Webpack then replaces this import with what is actually
|
||||||
|
//needed.
|
||||||
|
import("./pkg").then(runic => {
|
||||||
|
console.log('module is: ', runic);
|
||||||
|
runic.run_app();
|
||||||
|
});
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"devDependencies": {
|
||||||
|
"@wasm-tool/wasm-pack-plugin": "^1.4.0",
|
||||||
|
"clean-webpack-plugin": "^4.0.0-alpha.0",
|
||||||
|
"html-webpack-plugin": "^5.3.1",
|
||||||
|
"webpack": "^5.37.0",
|
||||||
|
"webpack-cli": "^4.7.0"
|
||||||
|
},
|
||||||
|
"name": "service-trait-example",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Stuff",
|
||||||
|
"main": "index.js",
|
||||||
|
"author": "projectmoon <projectmoon@agnos.is>",
|
||||||
|
"license": "MIT"
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
package hello;
|
||||||
|
|
||||||
|
service HelloWorld {
|
||||||
|
rpc SayHello(HelloRequest) returns (HelloReply);
|
||||||
|
}
|
||||||
|
|
||||||
|
message HelloRequest {
|
||||||
|
string name = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message HelloReply {
|
||||||
|
string text = 1;
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
const path = require("path");
|
||||||
|
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
|
||||||
|
const WasmPackPlugin = require("@wasm-tool/wasm-pack-plugin");
|
||||||
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
experiments: {
|
||||||
|
asyncWebAssembly: true
|
||||||
|
},
|
||||||
|
entry: './index.js',
|
||||||
|
mode: "development",
|
||||||
|
output: {
|
||||||
|
path: path.resolve(__dirname, './dist'),
|
||||||
|
filename: 'index_bundle.js',
|
||||||
|
},
|
||||||
|
|
||||||
|
plugins: [
|
||||||
|
new CleanWebpackPlugin(),
|
||||||
|
new HtmlWebpackPlugin(),
|
||||||
|
new WasmPackPlugin({
|
||||||
|
crateDirectory: path.resolve(__dirname, "crate"),
|
||||||
|
outDir: path.resolve(__dirname, "pkg"),
|
||||||
|
args: "--log-level warn",
|
||||||
|
extraArgs: "--no-typescript",
|
||||||
|
})
|
||||||
|
]
|
||||||
|
};
|
Loading…
Reference in New Issue