Compare commits
2 Commits
1fa1b10699
...
a0d2d1cb7f
| Author | SHA1 | Date | |
|---|---|---|---|
| a0d2d1cb7f | |||
| a99b5d0014 |
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,4 +1,5 @@
|
|||||||
__pycache__
|
__pycache__
|
||||||
/dist
|
/dist
|
||||||
/src/funnel/env
|
/src/funnel/env
|
||||||
/src/serve_currenttime/target
|
/src/serve_currenttime_rust/target
|
||||||
|
/src/serve_currenttime/node_modules
|
||||||
|
|||||||
@ -105,9 +105,17 @@ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
|
|||||||
|
|
||||||
### Rust services
|
### Rust services
|
||||||
|
|
||||||
|
Update `rustc`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
rustup update
|
||||||
|
```
|
||||||
|
|
||||||
#### [Tonic](https://github.com/hyperium/tonic)
|
#### [Tonic](https://github.com/hyperium/tonic)
|
||||||
|
|
||||||
Tonic is a gRPC over HTTP/2 implementation focused on high performance, interoperability, and flexibility. This library was created to have first class support of async/await and to act as a core building block for production systems written in Rust.
|
Tonic is a gRPC over HTTP/2 implementation focused on high performance, interoperability, and flexibility. This library was created to have first class support of async/await and to act as a core building block for production systems written in Rust.
|
||||||
|
|
||||||
|
[Hello world tutorial](https://github.com/hyperium/tonic/blob/master/examples/helloworld-tutorial.md)
|
||||||
|
|
||||||
|
|
||||||
[Rust and gRPC: A complete guide](https://blog.logrocket.com/rust-and-grpc-a-complete-guide/)
|
[Rust and gRPC: A complete guide](https://blog.logrocket.com/rust-and-grpc-a-complete-guide/)
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
package serve_currenttime;
|
||||||
|
|
||||||
service ServeCurrentTime {
|
service ServeCurrentTime {
|
||||||
rpc GetCurrentTime(GetCurrentTimeRequest) returns (GetCurrentTimeResponse);
|
rpc GetCurrentTime(GetCurrentTimeRequest) returns (GetCurrentTimeResponse);
|
||||||
7
src/serve_currenttime/Cargo.lock
generated
7
src/serve_currenttime/Cargo.lock
generated
@ -1,7 +0,0 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
|
||||||
# It is not intended for manual editing.
|
|
||||||
version = 3
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "serve_currenttime"
|
|
||||||
version = "0.1.0"
|
|
||||||
13
src/serve_currenttime/Makefile
Normal file
13
src/serve_currenttime/Makefile
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
PROTO_DIR=../protos
|
||||||
|
STUBS_DIR=./stubs
|
||||||
|
PROTO_FILENAME=serve_currenttime.proto
|
||||||
|
|
||||||
|
run:
|
||||||
|
@node main.js
|
||||||
|
|
||||||
|
proto:
|
||||||
|
@npx grpc_tools_node_protoc \
|
||||||
|
-I$(PROTO_DIR) \
|
||||||
|
--js_out=import_style=commonjs,binary:$(STUBS_DIR) \
|
||||||
|
--grpc_out=grpc_js:$(STUBS_DIR) \
|
||||||
|
$(PROTO_DIR)/$(PROTO_FILENAME)
|
||||||
27
src/serve_currenttime/main.js
Normal file
27
src/serve_currenttime/main.js
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
const messages = require("./stubs/serve_currenttime_pb");
|
||||||
|
const services = require("./stubs/serve_currenttime_grpc_pb");
|
||||||
|
const grpc = require("@grpc/grpc-js");
|
||||||
|
|
||||||
|
const SERVE_CURRENTTIME_HOST = "localhost";
|
||||||
|
const SERVE_CURRENTTIME_PORT = 50000;
|
||||||
|
|
||||||
|
function getCurrentTime(call, callback) {
|
||||||
|
var response = new messages.GetCurrentTimeResponse();
|
||||||
|
response.setMessage("Hello " + call.request.getName());
|
||||||
|
callback(null, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
console.log(`Starting server on ${SERVE_CURRENTTIME_HOST}:${SERVE_CURRENTTIME_PORT}`);
|
||||||
|
var server = new grpc.Server();
|
||||||
|
server.addService(services.ServeCurrentTimeService, { getCurrentTime: getCurrentTime });
|
||||||
|
server.bindAsync(
|
||||||
|
`${SERVE_CURRENTTIME_HOST}:${SERVE_CURRENTTIME_PORT}`,
|
||||||
|
grpc.ServerCredentials.createInsecure(),
|
||||||
|
() => {
|
||||||
|
server.start();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
main();
|
||||||
1512
src/serve_currenttime/package-lock.json
generated
Normal file
1512
src/serve_currenttime/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
13
src/serve_currenttime/package.json
Normal file
13
src/serve_currenttime/package.json
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"name": "grpc-examples",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"dependencies": {
|
||||||
|
"@grpc/grpc-js": "^1.8.12",
|
||||||
|
"@grpc/proto-loader": "^0.7.5",
|
||||||
|
"async": "^3.2.4",
|
||||||
|
"google-protobuf": "^3.21.2",
|
||||||
|
"grpc-tools": "^1.12.4",
|
||||||
|
"lodash": "^4.17.21",
|
||||||
|
"minimist": "^1.2.8"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,3 +0,0 @@
|
|||||||
fn main() {
|
|
||||||
println!("Hello, world!");
|
|
||||||
}
|
|
||||||
44
src/serve_currenttime/stubs/serve_currenttime_grpc_pb.js
Normal file
44
src/serve_currenttime/stubs/serve_currenttime_grpc_pb.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
// GENERATED CODE -- DO NOT EDIT!
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
var grpc = require('@grpc/grpc-js');
|
||||||
|
var serve_currenttime_pb = require('./serve_currenttime_pb.js');
|
||||||
|
|
||||||
|
function serialize_serve_currenttime_GetCurrentTimeRequest(arg) {
|
||||||
|
if (!(arg instanceof serve_currenttime_pb.GetCurrentTimeRequest)) {
|
||||||
|
throw new Error('Expected argument of type serve_currenttime.GetCurrentTimeRequest');
|
||||||
|
}
|
||||||
|
return Buffer.from(arg.serializeBinary());
|
||||||
|
}
|
||||||
|
|
||||||
|
function deserialize_serve_currenttime_GetCurrentTimeRequest(buffer_arg) {
|
||||||
|
return serve_currenttime_pb.GetCurrentTimeRequest.deserializeBinary(new Uint8Array(buffer_arg));
|
||||||
|
}
|
||||||
|
|
||||||
|
function serialize_serve_currenttime_GetCurrentTimeResponse(arg) {
|
||||||
|
if (!(arg instanceof serve_currenttime_pb.GetCurrentTimeResponse)) {
|
||||||
|
throw new Error('Expected argument of type serve_currenttime.GetCurrentTimeResponse');
|
||||||
|
}
|
||||||
|
return Buffer.from(arg.serializeBinary());
|
||||||
|
}
|
||||||
|
|
||||||
|
function deserialize_serve_currenttime_GetCurrentTimeResponse(buffer_arg) {
|
||||||
|
return serve_currenttime_pb.GetCurrentTimeResponse.deserializeBinary(new Uint8Array(buffer_arg));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var ServeCurrentTimeService = exports.ServeCurrentTimeService = {
|
||||||
|
getCurrentTime: {
|
||||||
|
path: '/serve_currenttime.ServeCurrentTime/GetCurrentTime',
|
||||||
|
requestStream: false,
|
||||||
|
responseStream: false,
|
||||||
|
requestType: serve_currenttime_pb.GetCurrentTimeRequest,
|
||||||
|
responseType: serve_currenttime_pb.GetCurrentTimeResponse,
|
||||||
|
requestSerialize: serialize_serve_currenttime_GetCurrentTimeRequest,
|
||||||
|
requestDeserialize: deserialize_serve_currenttime_GetCurrentTimeRequest,
|
||||||
|
responseSerialize: serialize_serve_currenttime_GetCurrentTimeResponse,
|
||||||
|
responseDeserialize: deserialize_serve_currenttime_GetCurrentTimeResponse,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ServeCurrentTimeClient = grpc.makeGenericClientConstructor(ServeCurrentTimeService);
|
||||||
448
src/serve_currenttime/stubs/serve_currenttime_pb.js
Normal file
448
src/serve_currenttime/stubs/serve_currenttime_pb.js
Normal file
@ -0,0 +1,448 @@
|
|||||||
|
// source: serve_currenttime.proto
|
||||||
|
/**
|
||||||
|
* @fileoverview
|
||||||
|
* @enhanceable
|
||||||
|
* @suppress {missingRequire} reports error on implicit type usages.
|
||||||
|
* @suppress {messageConventions} JS Compiler reports an error if a variable or
|
||||||
|
* field starts with 'MSG_' and isn't a translatable message.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
// GENERATED CODE -- DO NOT EDIT!
|
||||||
|
/* eslint-disable */
|
||||||
|
// @ts-nocheck
|
||||||
|
|
||||||
|
var jspb = require('google-protobuf');
|
||||||
|
var goog = jspb;
|
||||||
|
var global = (function() {
|
||||||
|
if (this) { return this; }
|
||||||
|
if (typeof window !== 'undefined') { return window; }
|
||||||
|
if (typeof global !== 'undefined') { return global; }
|
||||||
|
if (typeof self !== 'undefined') { return self; }
|
||||||
|
return Function('return this')();
|
||||||
|
}.call(null));
|
||||||
|
|
||||||
|
goog.exportSymbol('proto.serve_currenttime.GetCurrentTimeRequest', null, global);
|
||||||
|
goog.exportSymbol('proto.serve_currenttime.GetCurrentTimeResponse', null, global);
|
||||||
|
/**
|
||||||
|
* Generated by JsPbCodeGenerator.
|
||||||
|
* @param {Array=} opt_data Optional initial data array, typically from a
|
||||||
|
* server response, or constructed directly in Javascript. The array is used
|
||||||
|
* in place and becomes part of the constructed object. It is not cloned.
|
||||||
|
* If no data is provided, the constructed object will be empty, but still
|
||||||
|
* valid.
|
||||||
|
* @extends {jspb.Message}
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeRequest = function(opt_data) {
|
||||||
|
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
|
||||||
|
};
|
||||||
|
goog.inherits(proto.serve_currenttime.GetCurrentTimeRequest, jspb.Message);
|
||||||
|
if (goog.DEBUG && !COMPILED) {
|
||||||
|
/**
|
||||||
|
* @public
|
||||||
|
* @override
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeRequest.displayName = 'proto.serve_currenttime.GetCurrentTimeRequest';
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Generated by JsPbCodeGenerator.
|
||||||
|
* @param {Array=} opt_data Optional initial data array, typically from a
|
||||||
|
* server response, or constructed directly in Javascript. The array is used
|
||||||
|
* in place and becomes part of the constructed object. It is not cloned.
|
||||||
|
* If no data is provided, the constructed object will be empty, but still
|
||||||
|
* valid.
|
||||||
|
* @extends {jspb.Message}
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse = function(opt_data) {
|
||||||
|
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
|
||||||
|
};
|
||||||
|
goog.inherits(proto.serve_currenttime.GetCurrentTimeResponse, jspb.Message);
|
||||||
|
if (goog.DEBUG && !COMPILED) {
|
||||||
|
/**
|
||||||
|
* @public
|
||||||
|
* @override
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.displayName = 'proto.serve_currenttime.GetCurrentTimeResponse';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (jspb.Message.GENERATE_TO_OBJECT) {
|
||||||
|
/**
|
||||||
|
* Creates an object representation of this proto.
|
||||||
|
* Field names that are reserved in JavaScript and will be renamed to pb_name.
|
||||||
|
* Optional fields that are not set will be set to undefined.
|
||||||
|
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
|
||||||
|
* For the list of reserved names please see:
|
||||||
|
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
|
||||||
|
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
|
||||||
|
* JSPB instance for transitional soy proto support:
|
||||||
|
* http://goto/soy-param-migration
|
||||||
|
* @return {!Object}
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeRequest.prototype.toObject = function(opt_includeInstance) {
|
||||||
|
return proto.serve_currenttime.GetCurrentTimeRequest.toObject(opt_includeInstance, this);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Static version of the {@see toObject} method.
|
||||||
|
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
|
||||||
|
* the JSPB instance for transitional soy proto support:
|
||||||
|
* http://goto/soy-param-migration
|
||||||
|
* @param {!proto.serve_currenttime.GetCurrentTimeRequest} msg The msg instance to transform.
|
||||||
|
* @return {!Object}
|
||||||
|
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeRequest.toObject = function(includeInstance, msg) {
|
||||||
|
var f, obj = {
|
||||||
|
timezone: jspb.Message.getFieldWithDefault(msg, 1, "")
|
||||||
|
};
|
||||||
|
|
||||||
|
if (includeInstance) {
|
||||||
|
obj.$jspbMessageInstance = msg;
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserializes binary data (in protobuf wire format).
|
||||||
|
* @param {jspb.ByteSource} bytes The bytes to deserialize.
|
||||||
|
* @return {!proto.serve_currenttime.GetCurrentTimeRequest}
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeRequest.deserializeBinary = function(bytes) {
|
||||||
|
var reader = new jspb.BinaryReader(bytes);
|
||||||
|
var msg = new proto.serve_currenttime.GetCurrentTimeRequest;
|
||||||
|
return proto.serve_currenttime.GetCurrentTimeRequest.deserializeBinaryFromReader(msg, reader);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserializes binary data (in protobuf wire format) from the
|
||||||
|
* given reader into the given message object.
|
||||||
|
* @param {!proto.serve_currenttime.GetCurrentTimeRequest} msg The message object to deserialize into.
|
||||||
|
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
|
||||||
|
* @return {!proto.serve_currenttime.GetCurrentTimeRequest}
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeRequest.deserializeBinaryFromReader = function(msg, reader) {
|
||||||
|
while (reader.nextField()) {
|
||||||
|
if (reader.isEndGroup()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var field = reader.getFieldNumber();
|
||||||
|
switch (field) {
|
||||||
|
case 1:
|
||||||
|
var value = /** @type {string} */ (reader.readString());
|
||||||
|
msg.setTimezone(value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
reader.skipField();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return msg;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serializes the message to binary data (in protobuf wire format).
|
||||||
|
* @return {!Uint8Array}
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeRequest.prototype.serializeBinary = function() {
|
||||||
|
var writer = new jspb.BinaryWriter();
|
||||||
|
proto.serve_currenttime.GetCurrentTimeRequest.serializeBinaryToWriter(this, writer);
|
||||||
|
return writer.getResultBuffer();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serializes the given message to binary data (in protobuf wire
|
||||||
|
* format), writing to the given BinaryWriter.
|
||||||
|
* @param {!proto.serve_currenttime.GetCurrentTimeRequest} message
|
||||||
|
* @param {!jspb.BinaryWriter} writer
|
||||||
|
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeRequest.serializeBinaryToWriter = function(message, writer) {
|
||||||
|
var f = undefined;
|
||||||
|
f = message.getTimezone();
|
||||||
|
if (f.length > 0) {
|
||||||
|
writer.writeString(
|
||||||
|
1,
|
||||||
|
f
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* optional string timezone = 1;
|
||||||
|
* @return {string}
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeRequest.prototype.getTimezone = function() {
|
||||||
|
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} value
|
||||||
|
* @return {!proto.serve_currenttime.GetCurrentTimeRequest} returns this
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeRequest.prototype.setTimezone = function(value) {
|
||||||
|
return jspb.Message.setProto3StringField(this, 1, value);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (jspb.Message.GENERATE_TO_OBJECT) {
|
||||||
|
/**
|
||||||
|
* Creates an object representation of this proto.
|
||||||
|
* Field names that are reserved in JavaScript and will be renamed to pb_name.
|
||||||
|
* Optional fields that are not set will be set to undefined.
|
||||||
|
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
|
||||||
|
* For the list of reserved names please see:
|
||||||
|
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
|
||||||
|
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
|
||||||
|
* JSPB instance for transitional soy proto support:
|
||||||
|
* http://goto/soy-param-migration
|
||||||
|
* @return {!Object}
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.prototype.toObject = function(opt_includeInstance) {
|
||||||
|
return proto.serve_currenttime.GetCurrentTimeResponse.toObject(opt_includeInstance, this);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Static version of the {@see toObject} method.
|
||||||
|
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
|
||||||
|
* the JSPB instance for transitional soy proto support:
|
||||||
|
* http://goto/soy-param-migration
|
||||||
|
* @param {!proto.serve_currenttime.GetCurrentTimeResponse} msg The msg instance to transform.
|
||||||
|
* @return {!Object}
|
||||||
|
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.toObject = function(includeInstance, msg) {
|
||||||
|
var f, obj = {
|
||||||
|
hours: jspb.Message.getFieldWithDefault(msg, 1, 0),
|
||||||
|
minutes: jspb.Message.getFieldWithDefault(msg, 2, 0),
|
||||||
|
seconds: jspb.Message.getFieldWithDefault(msg, 3, 0),
|
||||||
|
milliseconds: jspb.Message.getFieldWithDefault(msg, 4, 0),
|
||||||
|
formattedTime: jspb.Message.getFieldWithDefault(msg, 5, "")
|
||||||
|
};
|
||||||
|
|
||||||
|
if (includeInstance) {
|
||||||
|
obj.$jspbMessageInstance = msg;
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserializes binary data (in protobuf wire format).
|
||||||
|
* @param {jspb.ByteSource} bytes The bytes to deserialize.
|
||||||
|
* @return {!proto.serve_currenttime.GetCurrentTimeResponse}
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.deserializeBinary = function(bytes) {
|
||||||
|
var reader = new jspb.BinaryReader(bytes);
|
||||||
|
var msg = new proto.serve_currenttime.GetCurrentTimeResponse;
|
||||||
|
return proto.serve_currenttime.GetCurrentTimeResponse.deserializeBinaryFromReader(msg, reader);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserializes binary data (in protobuf wire format) from the
|
||||||
|
* given reader into the given message object.
|
||||||
|
* @param {!proto.serve_currenttime.GetCurrentTimeResponse} msg The message object to deserialize into.
|
||||||
|
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
|
||||||
|
* @return {!proto.serve_currenttime.GetCurrentTimeResponse}
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.deserializeBinaryFromReader = function(msg, reader) {
|
||||||
|
while (reader.nextField()) {
|
||||||
|
if (reader.isEndGroup()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var field = reader.getFieldNumber();
|
||||||
|
switch (field) {
|
||||||
|
case 1:
|
||||||
|
var value = /** @type {number} */ (reader.readUint32());
|
||||||
|
msg.setHours(value);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
var value = /** @type {number} */ (reader.readUint32());
|
||||||
|
msg.setMinutes(value);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
var value = /** @type {number} */ (reader.readUint32());
|
||||||
|
msg.setSeconds(value);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
var value = /** @type {number} */ (reader.readUint32());
|
||||||
|
msg.setMilliseconds(value);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
var value = /** @type {string} */ (reader.readString());
|
||||||
|
msg.setFormattedTime(value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
reader.skipField();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return msg;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serializes the message to binary data (in protobuf wire format).
|
||||||
|
* @return {!Uint8Array}
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.prototype.serializeBinary = function() {
|
||||||
|
var writer = new jspb.BinaryWriter();
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.serializeBinaryToWriter(this, writer);
|
||||||
|
return writer.getResultBuffer();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serializes the given message to binary data (in protobuf wire
|
||||||
|
* format), writing to the given BinaryWriter.
|
||||||
|
* @param {!proto.serve_currenttime.GetCurrentTimeResponse} message
|
||||||
|
* @param {!jspb.BinaryWriter} writer
|
||||||
|
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.serializeBinaryToWriter = function(message, writer) {
|
||||||
|
var f = undefined;
|
||||||
|
f = message.getHours();
|
||||||
|
if (f !== 0) {
|
||||||
|
writer.writeUint32(
|
||||||
|
1,
|
||||||
|
f
|
||||||
|
);
|
||||||
|
}
|
||||||
|
f = message.getMinutes();
|
||||||
|
if (f !== 0) {
|
||||||
|
writer.writeUint32(
|
||||||
|
2,
|
||||||
|
f
|
||||||
|
);
|
||||||
|
}
|
||||||
|
f = message.getSeconds();
|
||||||
|
if (f !== 0) {
|
||||||
|
writer.writeUint32(
|
||||||
|
3,
|
||||||
|
f
|
||||||
|
);
|
||||||
|
}
|
||||||
|
f = message.getMilliseconds();
|
||||||
|
if (f !== 0) {
|
||||||
|
writer.writeUint32(
|
||||||
|
4,
|
||||||
|
f
|
||||||
|
);
|
||||||
|
}
|
||||||
|
f = message.getFormattedTime();
|
||||||
|
if (f.length > 0) {
|
||||||
|
writer.writeString(
|
||||||
|
5,
|
||||||
|
f
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* optional uint32 hours = 1;
|
||||||
|
* @return {number}
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.prototype.getHours = function() {
|
||||||
|
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {number} value
|
||||||
|
* @return {!proto.serve_currenttime.GetCurrentTimeResponse} returns this
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.prototype.setHours = function(value) {
|
||||||
|
return jspb.Message.setProto3IntField(this, 1, value);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* optional uint32 minutes = 2;
|
||||||
|
* @return {number}
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.prototype.getMinutes = function() {
|
||||||
|
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {number} value
|
||||||
|
* @return {!proto.serve_currenttime.GetCurrentTimeResponse} returns this
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.prototype.setMinutes = function(value) {
|
||||||
|
return jspb.Message.setProto3IntField(this, 2, value);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* optional uint32 seconds = 3;
|
||||||
|
* @return {number}
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.prototype.getSeconds = function() {
|
||||||
|
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {number} value
|
||||||
|
* @return {!proto.serve_currenttime.GetCurrentTimeResponse} returns this
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.prototype.setSeconds = function(value) {
|
||||||
|
return jspb.Message.setProto3IntField(this, 3, value);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* optional uint32 milliseconds = 4;
|
||||||
|
* @return {number}
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.prototype.getMilliseconds = function() {
|
||||||
|
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {number} value
|
||||||
|
* @return {!proto.serve_currenttime.GetCurrentTimeResponse} returns this
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.prototype.setMilliseconds = function(value) {
|
||||||
|
return jspb.Message.setProto3IntField(this, 4, value);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* optional string formatted_time = 5;
|
||||||
|
* @return {string}
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.prototype.getFormattedTime = function() {
|
||||||
|
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} value
|
||||||
|
* @return {!proto.serve_currenttime.GetCurrentTimeResponse} returns this
|
||||||
|
*/
|
||||||
|
proto.serve_currenttime.GetCurrentTimeResponse.prototype.setFormattedTime = function(value) {
|
||||||
|
return jspb.Message.setProto3StringField(this, 5, value);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
goog.object.extend(exports, proto.serve_currenttime);
|
||||||
1072
src/serve_currenttime_rust/Cargo.lock
generated
Normal file
1072
src/serve_currenttime_rust/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -5,8 +5,14 @@ edition = "2021"
|
|||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "server"
|
name = "serve_currenttime"
|
||||||
path = "src/server.rs"
|
path = "src/main.rs"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
tonic = "0.8"
|
||||||
|
prost = "0.11"
|
||||||
|
tokio = { version = "1.19.2", features = ["macros", "rt-multi-thread"] }
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
tonic-build = "0.8"
|
||||||
2
src/serve_currenttime_rust/Makefile
Normal file
2
src/serve_currenttime_rust/Makefile
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
run:
|
||||||
|
cargo run --bin serve_currenttime
|
||||||
4
src/serve_currenttime_rust/build.rs
Normal file
4
src/serve_currenttime_rust/build.rs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
tonic_build::compile_protos("../protos/serve_currenttime.proto")?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
61
src/serve_currenttime_rust/src/main.rs
Normal file
61
src/serve_currenttime_rust/src/main.rs
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
use serve_currenttime::{
|
||||||
|
serve_current_time_server::{ServeCurrentTime, ServeCurrentTimeServer},
|
||||||
|
GetCurrentTimeRequest, GetCurrentTimeResponse,
|
||||||
|
};
|
||||||
|
|
||||||
|
// use serve_currenttime::{
|
||||||
|
// serve_currenttime_server::{ServeCurrentTime, ServeCurrentTimeServer},
|
||||||
|
// GetCurrentTimeRequest, GetCurrentTimeResponse,
|
||||||
|
// };
|
||||||
|
|
||||||
|
use tonic::{transport::Server, Request, Response, Status};
|
||||||
|
|
||||||
|
pub mod serve_currenttime {
|
||||||
|
tonic::include_proto!("serve_currenttime");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
let address = "[::1]:8080".parse().unwrap();
|
||||||
|
let voting_service = ServeCurrentTimeService::default();
|
||||||
|
|
||||||
|
Server::builder()
|
||||||
|
.add_service(ServeCurrentTimeServer::new(voting_service))
|
||||||
|
.serve(address)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
pub struct ServeCurrentTimeService {}
|
||||||
|
|
||||||
|
#[tonic::async_trait]
|
||||||
|
impl ServeCurrentTime for ServeCurrentTimeService {
|
||||||
|
async fn get_current_time(
|
||||||
|
&self,
|
||||||
|
request: Request<GetCurrentTimeRequest>,
|
||||||
|
) -> Result<Response<GetCurrentTimeResponse>, Status> {
|
||||||
|
let r = request.into_inner();
|
||||||
|
|
||||||
|
Ok(Response::new(GetCurrentTimeResponse {
|
||||||
|
formatted_time: "xxx".to_string(),
|
||||||
|
hours: 11,
|
||||||
|
minutes: 22,
|
||||||
|
seconds: 33,
|
||||||
|
milliseconds: 44,
|
||||||
|
}))
|
||||||
|
|
||||||
|
// match r.vote {
|
||||||
|
// 0 => Ok(Response::new(serve_currenttime::GetCurrentTimeResponse {
|
||||||
|
// confirmation: { format!("Happy to confirm that you upvoted for {}", r.url) },
|
||||||
|
// })),
|
||||||
|
// 1 => Ok(Response::new(serve_currenttime::GetCurrentTimeResponse {
|
||||||
|
// confirmation: { format!("Confirmation that you downvoted for {}", r.url) },
|
||||||
|
// })),
|
||||||
|
// _ => Err(Status::new(
|
||||||
|
// tonic::Code::OutOfRange,
|
||||||
|
// "Invalid vote provided",
|
||||||
|
// )),
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user