add flowy-net crate shared code by server and client

This commit is contained in:
appflowy
2021-08-20 11:52:45 +08:00
parent 89c5d5468e
commit 139a21d98a
43 changed files with 325 additions and 261 deletions

View File

View File

@ -161,17 +161,22 @@ class SignUpParams extends $pb.GeneratedMessage {
class SignUpResponse extends $pb.GeneratedMessage { class SignUpResponse extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'SignUpResponse', createEmptyInstance: create) static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'SignUpResponse', createEmptyInstance: create)
..aOB(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'isSuccess') ..aOB(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'name')
..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'email')
..hasRequiredFields = false ..hasRequiredFields = false
; ;
SignUpResponse._() : super(); SignUpResponse._() : super();
factory SignUpResponse({ factory SignUpResponse({
$core.bool? isSuccess, $core.bool? name,
$core.String? email,
}) { }) {
final _result = create(); final _result = create();
if (isSuccess != null) { if (name != null) {
_result.isSuccess = isSuccess; _result.name = name;
}
if (email != null) {
_result.email = email;
} }
return _result; return _result;
} }
@ -197,12 +202,21 @@ class SignUpResponse extends $pb.GeneratedMessage {
static SignUpResponse? _defaultInstance; static SignUpResponse? _defaultInstance;
@$pb.TagNumber(1) @$pb.TagNumber(1)
$core.bool get isSuccess => $_getBF(0); $core.bool get name => $_getBF(0);
@$pb.TagNumber(1) @$pb.TagNumber(1)
set isSuccess($core.bool v) { $_setBool(0, v); } set name($core.bool v) { $_setBool(0, v); }
@$pb.TagNumber(1) @$pb.TagNumber(1)
$core.bool hasIsSuccess() => $_has(0); $core.bool hasName() => $_has(0);
@$pb.TagNumber(1) @$pb.TagNumber(1)
void clearIsSuccess() => clearField(1); void clearName() => clearField(1);
@$pb.TagNumber(2)
$core.String get email => $_getSZ(1);
@$pb.TagNumber(2)
set email($core.String v) { $_setString(1, v); }
@$pb.TagNumber(2)
$core.bool hasEmail() => $_has(1);
@$pb.TagNumber(2)
void clearEmail() => clearField(2);
} }

View File

@ -36,9 +36,10 @@ final $typed_data.Uint8List signUpParamsDescriptor = $convert.base64Decode('CgxT
const SignUpResponse$json = const { const SignUpResponse$json = const {
'1': 'SignUpResponse', '1': 'SignUpResponse',
'2': const [ '2': const [
const {'1': 'is_success', '3': 1, '4': 1, '5': 8, '10': 'isSuccess'}, const {'1': 'name', '3': 1, '4': 1, '5': 8, '10': 'name'},
const {'1': 'email', '3': 2, '4': 1, '5': 9, '10': 'email'},
], ],
}; };
/// Descriptor for `SignUpResponse`. Decode as a `google.protobuf.DescriptorProto`. /// Descriptor for `SignUpResponse`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List signUpResponseDescriptor = $convert.base64Decode('Cg5TaWduVXBSZXNwb25zZRIdCgppc19zdWNjZXNzGAEgASgIUglpc1N1Y2Nlc3M='); final $typed_data.Uint8List signUpResponseDescriptor = $convert.base64Decode('Cg5TaWduVXBSZXNwb25zZRISCgRuYW1lGAEgASgIUgRuYW1lEhQKBWVtYWlsGAIgASgJUgVlbWFpbA==');

View File

@ -24,6 +24,7 @@ derive_more = {version = "0.99", features = ["display"]}
protobuf = {version = "2.20.0"} protobuf = {version = "2.20.0"}
flowy-log = { path = "../rust-lib/flowy-log" } flowy-log = { path = "../rust-lib/flowy-log" }
flowy-user = { path = "../rust-lib/flowy-user" } flowy-user = { path = "../rust-lib/flowy-user" }
flowy-net = { path = "../rust-lib/flowy-net", features = ["http"] }
[dependencies.sqlx] [dependencies.sqlx]
version = "0.5.2" version = "0.5.2"
@ -38,8 +39,6 @@ features = [
] ]
[lib] [lib]
path = "src/lib.rs" path = "src/lib.rs"

View File

@ -1,7 +1 @@
mod response;
mod response_serde;
mod server_code;
pub use response::*;
pub use response_serde::*;
pub use server_code::*;

View File

@ -1,12 +0,0 @@
use serde_repr::*;
#[derive(Serialize_repr, Deserialize_repr, PartialEq, Debug)]
#[repr(u16)]
pub enum ServerCode {
Success = 0,
InvalidToken = 1,
InternalError = 2,
Unauthorized = 3,
PayloadOverflow = 4,
PayloadSerdeFail = 5,
}

View File

@ -1,48 +0,0 @@
use crate::entities::{ServerCode, ServerResponse};
use actix_web::{error::ResponseError, HttpResponse};
use protobuf::ProtobufError;
use std::fmt::Formatter;
#[derive(Debug)]
pub enum ServerError {
InternalError(String),
BadRequest(ServerResponse<String>),
Unauthorized,
}
impl std::fmt::Display for ServerError {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
ServerError::InternalError(_) => f.write_str("Internal Server Error"),
ServerError::BadRequest(request) => {
let msg = format!("Bad Request: {:?}", request);
f.write_str(&msg)
},
ServerError::Unauthorized => f.write_str("Unauthorized"),
}
}
}
impl ResponseError for ServerError {
fn error_response(&self) -> HttpResponse {
match self {
ServerError::InternalError(msg) => {
let msg = format!("Internal Server Error. {}", msg);
let resp = ServerResponse::from_msg(&msg, ServerCode::InternalError);
HttpResponse::InternalServerError().json(resp)
},
ServerError::BadRequest(ref resp) => HttpResponse::BadRequest().json(resp),
ServerError::Unauthorized => {
let resp = ServerResponse::from_msg("Unauthorized", ServerCode::Unauthorized);
HttpResponse::Unauthorized().json(resp)
},
}
}
}
impl std::convert::From<ProtobufError> for ServerError {
fn from(err: ProtobufError) -> Self {
let msg = format!("{:?}", err);
ServerError::InternalError(msg)
}
}

View File

@ -1,7 +1,6 @@
mod config; mod config;
mod context; mod context;
mod entities; mod entities;
mod errors;
mod routers; mod routers;
pub mod startup; pub mod startup;
pub mod user_service; pub mod user_service;

View File

@ -1,9 +1,6 @@
use crate::{ use crate::config::MAX_PAYLOAD_SIZE;
config::MAX_PAYLOAD_SIZE,
entities::{ServerCode, ServerResponse},
errors::ServerError,
};
use actix_web::web; use actix_web::web;
use flowy_net::{errors::ServerError, response::*};
use futures::StreamExt; use futures::StreamExt;
use protobuf::{Message, ProtobufResult}; use protobuf::{Message, ProtobufResult};

View File

@ -1,23 +1,24 @@
use crate::user_service::Auth; use crate::{routers::helper::parse_from_payload, user_service::Auth};
use actix_web::{ use actix_web::{
web::{Data, Payload}, web::{Data, Payload},
Error, Error,
HttpRequest, HttpRequest,
HttpResponse, HttpResponse,
}; };
use flowy_user::protobuf::SignUpRequest; use flowy_net::response::*;
use flowy_user::protobuf::SignUpParams;
use crate::{entities::ServerResponse, routers::helper::parse_from_payload};
use std::sync::Arc; use std::sync::Arc;
pub async fn user_register( pub async fn user_register(
request: HttpRequest, _request: HttpRequest,
payload: Payload, payload: Payload,
auth: Data<Arc<Auth>>, auth: Data<Arc<Auth>>,
) -> Result<HttpResponse, Error> { ) -> Result<HttpResponse, Error> {
let request: SignUpRequest = parse_from_payload(payload).await?; let params: SignUpParams = parse_from_payload(payload).await?;
// ProtobufError let _ = auth.sign_up(params)?;
let resp = ServerResponse::success(); let resp = ServerResponse::success();
Ok(resp.into()) Ok(resp.into())
} }

View File

@ -1,5 +1,5 @@
use crate::errors::ServerError; use flowy_net::errors::ServerError;
use flowy_user::protobuf::SignUpRequest; use flowy_user::protobuf::SignUpParams;
use sqlx::PgPool; use sqlx::PgPool;
use std::sync::Arc; use std::sync::Arc;
@ -10,5 +10,5 @@ pub struct Auth {
impl Auth { impl Auth {
pub fn new(db_pool: Arc<PgPool>) -> Self { Self { db_pool } } pub fn new(db_pool: Arc<PgPool>) -> Self { Self { db_pool } }
pub fn handle_sign_up(&self, request: SignUpRequest) -> Result<(), ServerError> { Ok(()) } pub fn sign_up(&self, params: SignUpParams) -> Result<(), ServerError> { Ok(()) }
} }

View File

@ -1,5 +1,6 @@
use crate::{errors::ServerError, ws_service::ClientMessage}; use crate::ws_service::ClientMessage;
use actix::{Message, Recipient}; use actix::{Message, Recipient};
use flowy_net::errors::ServerError;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::fmt::Formatter; use std::fmt::Formatter;

View File

@ -1,12 +1,10 @@
use crate::{ use crate::ws_service::{
errors::ServerError, entities::{Connect, Disconnect, Session, SessionId},
ws_service::{ ClientMessage,
entities::{Connect, Disconnect, Session, SessionId},
ClientMessage,
},
}; };
use actix::{Actor, Context, Handler}; use actix::{Actor, Context, Handler};
use dashmap::DashMap; use dashmap::DashMap;
use flowy_net::errors::ServerError;
pub struct WSServer { pub struct WSServer {
sessions: DashMap<SessionId, Session>, sessions: DashMap<SessionId, Session>,

View File

@ -16,6 +16,7 @@ members = [
"flowy-document", "flowy-document",
"flowy-editor", "flowy-editor",
"flowy-ot", "flowy-ot",
"flowy-net",
] ]
[profile.dev] [profile.dev]

View File

@ -1,4 +1,2 @@
mod model; mod model;
pub use model::*; pub use model::*;

View File

@ -1,7 +1,7 @@
// Auto-generated, do not edit // Auto-generated, do not edit
mod ffi_response; mod ffi_response;
pub use ffi_response::*; pub use ffi_response::*;
mod ffi_request; mod ffi_request;
pub use ffi_request::*; pub use ffi_request::*;

View File

@ -54,8 +54,7 @@ pub fn category_from_str(type_str: &str) -> TypeCategory {
| "SignUpResponse" | "SignUpResponse"
| "SignInRequest" | "SignInRequest"
| "SignInParams" | "SignInParams"
| "UserError" | "UserError" => TypeCategory::Protobuf,
=> TypeCategory::Protobuf,
"ViewType" "ViewType"
| "WorkspaceEvent" | "WorkspaceEvent"
| "WsErrCode" | "WsErrCode"
@ -65,8 +64,7 @@ pub fn category_from_str(type_str: &str) -> TypeCategory {
| "FFIStatusCode" | "FFIStatusCode"
| "UserStatus" | "UserStatus"
| "UserEvent" | "UserEvent"
| "UserErrCode" | "UserErrCode" => TypeCategory::Enum,
=> TypeCategory::Enum,
"Option" => TypeCategory::Opt, "Option" => TypeCategory::Opt,
_ => TypeCategory::Primitive, _ => TypeCategory::Primitive,

View File

@ -1,5 +1,5 @@
use crate::service::{Service, ServiceFactory}; use crate::service::{Service, ServiceFactory};
use futures_core::future::{BoxFuture}; use futures_core::future::BoxFuture;
pub fn factory<SF, Req>(factory: SF) -> BoxServiceFactory<SF::Context, Req, SF::Response, SF::Error> pub fn factory<SF, Req>(factory: SF) -> BoxServiceFactory<SF::Context, Req, SF::Response, SF::Error>
where where

View File

@ -41,7 +41,9 @@ pub struct ServiceResponse {
} }
impl ServiceResponse { impl ServiceResponse {
pub fn new(request: EventRequest, response: EventResponse) -> Self { ServiceResponse { request, response } } pub fn new(request: EventRequest, response: EventResponse) -> Self {
ServiceResponse { request, response }
}
pub fn into_parts(self) -> (EventRequest, EventResponse) { (self.request, self.response) } pub fn into_parts(self) -> (EventRequest, EventResponse) { (self.request, self.response) }
} }

View File

@ -1,6 +1,8 @@
use std::future::Future; use std::{
use std::pin::Pin; future::Future,
use std::task::{Context, Poll}; pin::Pin,
task::{Context, Poll},
};
pub struct Ready<T> { pub struct Ready<T> {
val: Option<T>, val: Option<T>,
@ -8,9 +10,7 @@ pub struct Ready<T> {
impl<T> Ready<T> { impl<T> Ready<T> {
#[inline] #[inline]
pub fn into_inner(mut self) -> T { pub fn into_inner(mut self) -> T { self.val.take().unwrap() }
self.val.take().unwrap()
}
} }
impl<T> Unpin for Ready<T> {} impl<T> Unpin for Ready<T> {}
@ -25,6 +25,4 @@ impl<T> Future for Ready<T> {
} }
} }
pub fn ready<T>(val: T) -> Ready<T> { pub fn ready<T>(val: T) -> Ready<T> { Ready { val: Some(val) } }
Ready { val: Some(val) }
}

View File

@ -1,4 +1,2 @@
mod model; mod model;
pub use model::*; pub use model::*;

View File

@ -1,16 +1,16 @@
// Auto-generated, do not edit // Auto-generated, do not edit
mod doc_modify; mod doc_modify;
pub use doc_modify::*; pub use doc_modify::*;
mod doc_create; mod doc_create;
pub use doc_create::*; pub use doc_create::*;
mod errors; mod errors;
pub use errors::*; pub use errors::*;
mod event; mod event;
pub use event::*; pub use event::*;
mod doc_query; mod doc_query;
pub use doc_query::*; pub use doc_query::*;

View File

@ -1,4 +1,2 @@
mod model; mod model;
pub use model::*; pub use model::*;

View File

@ -1,4 +1,4 @@
// Auto-generated, do not edit // Auto-generated, do not edit
mod kv; mod kv;
pub use kv::*; pub use kv::*;

View File

@ -0,0 +1,17 @@
[package]
name = "flowy-net"
version = "0.1.0"
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
reqwest = "0.11"
protobuf = {version = "2.18.0"}
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
serde_repr = "0.1"
actix-web = {version = "3", optional = true}
[features]
http = ["actix-web"]

View File

@ -0,0 +1,30 @@
use crate::response::ServerResponse;
use protobuf::ProtobufError;
use std::fmt::{Formatter, Write};
#[derive(Debug)]
pub enum ServerError {
InternalError(String),
BadRequest(ServerResponse<String>),
Unauthorized,
}
impl std::fmt::Display for ServerError {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
ServerError::InternalError(_) => f.write_str("Internal Server Error"),
ServerError::BadRequest(request) => {
let msg = format!("Bad Request: {:?}", request);
f.write_str(&msg)
},
ServerError::Unauthorized => f.write_str("Unauthorized"),
}
}
}
impl std::convert::From<ProtobufError> for ServerError {
fn from(err: ProtobufError) -> Self {
let msg = format!("{:?}", err);
ServerError::InternalError(msg)
}
}

View File

@ -0,0 +1,2 @@
pub mod errors;
pub mod response;

View File

@ -0,0 +1,7 @@
mod response;
mod response_serde;
#[cfg(feature = "http")]
mod response_http;
pub use response::*;

View File

@ -1,8 +1,19 @@
use crate::{entities::ServerCode, errors::ServerError}; use crate::errors::ServerError;
use actix_web::{body::Body, HttpResponse, ResponseError};
use serde::Serialize; use serde::Serialize;
use serde_repr::*;
#[derive(Serialize_repr, Deserialize_repr, PartialEq, Debug)]
#[repr(u16)]
pub enum ServerCode {
Success = 0,
InvalidToken = 1,
InternalError = 2,
Unauthorized = 3,
PayloadOverflow = 4,
PayloadSerdeFail = 5,
}
#[derive(Debug, Serialize)] #[derive(Debug, Serialize)]
pub struct ServerResponse<T> { pub struct ServerResponse<T> {
pub msg: String, pub msg: String,
@ -31,15 +42,3 @@ impl ServerResponse<String> {
Self::new(Some("".to_owned()), msg, code) Self::new(Some("".to_owned()), msg, code)
} }
} }
impl<T: Serialize> std::convert::Into<HttpResponse> for ServerResponse<T> {
fn into(self) -> HttpResponse {
match serde_json::to_string(&self) {
Ok(body) => HttpResponse::Ok().body(Body::from(body)),
Err(e) => {
let msg = format!("Serial error: {:?}", e);
ServerError::InternalError(msg).error_response()
},
}
}
}

View File

@ -0,0 +1,31 @@
use crate::{errors::ServerError, response::*};
use actix_web::{body::Body, error::ResponseError, HttpResponse};
use serde::Serialize;
impl ResponseError for ServerError {
fn error_response(&self) -> HttpResponse {
match self {
ServerError::InternalError(msg) => {
let resp = ServerResponse::from_msg(&msg, ServerCode::InternalError);
HttpResponse::InternalServerError().json(resp)
},
ServerError::BadRequest(ref resp) => HttpResponse::BadRequest().json(resp),
ServerError::Unauthorized => {
let resp = ServerResponse::from_msg("Unauthorized", ServerCode::Unauthorized);
HttpResponse::Unauthorized().json(resp)
},
}
}
}
impl<T: Serialize> std::convert::Into<HttpResponse> for ServerResponse<T> {
fn into(self) -> HttpResponse {
match serde_json::to_string(&self) {
Ok(body) => HttpResponse::Ok().body(Body::from(body)),
Err(e) => {
let msg = format!("Serial error: {:?}", e);
ServerError::InternalError(msg).error_response()
},
}
}
}

View File

@ -1,4 +1,4 @@
use crate::entities::{ServerCode, ServerResponse}; use crate::response::{ServerCode, ServerResponse};
use serde::{ use serde::{
de::{self, MapAccess, Visitor}, de::{self, MapAccess, Visitor},
Deserialize, Deserialize,

View File

@ -21,7 +21,7 @@ impl std::default::Default for ObservableSubject {
category: "".to_string(), category: "".to_string(),
ty: 0, ty: 0,
subject_id: "".to_string(), subject_id: "".to_string(),
subject_payload: None subject_payload: None,
} }
} }
} }

View File

@ -1,4 +1,2 @@
mod model; mod model;
pub use model::*; pub use model::*;

View File

@ -1,4 +1,4 @@
// Auto-generated, do not edit // Auto-generated, do not edit
mod subject; mod subject;
pub use subject::*; pub use subject::*;

View File

@ -0,0 +1 @@

View File

@ -57,9 +57,8 @@ pub struct SignUpParams {
#[derive(ProtoBuf, Debug, Default)] #[derive(ProtoBuf, Debug, Default)]
pub struct SignUpResponse { pub struct SignUpResponse {
#[pb(index = 1)] #[pb(index = 1)]
pub is_success: bool, pub name: bool,
}
impl SignUpResponse { #[pb(index = 2)]
pub fn new(is_success: bool) -> Self { Self { is_success } } pub email: String,
} }

View File

@ -1,4 +1,2 @@
mod model; mod model;
pub use model::*; pub use model::*;

View File

@ -1,22 +1,22 @@
// Auto-generated, do not edit // Auto-generated, do not edit
mod sign_up; mod sign_up;
pub use sign_up::*; pub use sign_up::*;
mod sign_in; mod sign_in;
pub use sign_in::*; pub use sign_in::*;
mod user_table; mod user_table;
pub use user_table::*; pub use user_table::*;
mod errors; mod errors;
pub use errors::*; pub use errors::*;
mod user_detail; mod user_detail;
pub use user_detail::*; pub use user_detail::*;
mod user_update; mod user_update;
pub use user_update::*; pub use user_update::*;
mod event; mod event;
pub use event::*; pub use event::*;

View File

@ -512,7 +512,8 @@ impl ::protobuf::reflect::ProtobufValue for SignUpParams {
#[derive(PartialEq,Clone,Default)] #[derive(PartialEq,Clone,Default)]
pub struct SignUpResponse { pub struct SignUpResponse {
// message fields // message fields
pub is_success: bool, pub name: bool,
pub email: ::std::string::String,
// special fields // special fields
pub unknown_fields: ::protobuf::UnknownFields, pub unknown_fields: ::protobuf::UnknownFields,
pub cached_size: ::protobuf::CachedSize, pub cached_size: ::protobuf::CachedSize,
@ -529,19 +530,45 @@ impl SignUpResponse {
::std::default::Default::default() ::std::default::Default::default()
} }
// bool is_success = 1; // bool name = 1;
pub fn get_is_success(&self) -> bool { pub fn get_name(&self) -> bool {
self.is_success self.name
} }
pub fn clear_is_success(&mut self) { pub fn clear_name(&mut self) {
self.is_success = false; self.name = false;
} }
// Param is passed by value, moved // Param is passed by value, moved
pub fn set_is_success(&mut self, v: bool) { pub fn set_name(&mut self, v: bool) {
self.is_success = v; self.name = v;
}
// string email = 2;
pub fn get_email(&self) -> &str {
&self.email
}
pub fn clear_email(&mut self) {
self.email.clear();
}
// Param is passed by value, moved
pub fn set_email(&mut self, v: ::std::string::String) {
self.email = v;
}
// Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first.
pub fn mut_email(&mut self) -> &mut ::std::string::String {
&mut self.email
}
// Take field
pub fn take_email(&mut self) -> ::std::string::String {
::std::mem::replace(&mut self.email, ::std::string::String::new())
} }
} }
@ -559,7 +586,10 @@ impl ::protobuf::Message for SignUpResponse {
return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
} }
let tmp = is.read_bool()?; let tmp = is.read_bool()?;
self.is_success = tmp; self.name = tmp;
},
2 => {
::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.email)?;
}, },
_ => { _ => {
::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
@ -573,17 +603,23 @@ impl ::protobuf::Message for SignUpResponse {
#[allow(unused_variables)] #[allow(unused_variables)]
fn compute_size(&self) -> u32 { fn compute_size(&self) -> u32 {
let mut my_size = 0; let mut my_size = 0;
if self.is_success != false { if self.name != false {
my_size += 2; my_size += 2;
} }
if !self.email.is_empty() {
my_size += ::protobuf::rt::string_size(2, &self.email);
}
my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
self.cached_size.set(my_size); self.cached_size.set(my_size);
my_size my_size
} }
fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
if self.is_success != false { if self.name != false {
os.write_bool(1, self.is_success)?; os.write_bool(1, self.name)?;
}
if !self.email.is_empty() {
os.write_string(2, &self.email)?;
} }
os.write_unknown_fields(self.get_unknown_fields())?; os.write_unknown_fields(self.get_unknown_fields())?;
::std::result::Result::Ok(()) ::std::result::Result::Ok(())
@ -624,9 +660,14 @@ impl ::protobuf::Message for SignUpResponse {
descriptor.get(|| { descriptor.get(|| {
let mut fields = ::std::vec::Vec::new(); let mut fields = ::std::vec::Vec::new();
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBool>( fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBool>(
"is_success", "name",
|m: &SignUpResponse| { &m.is_success }, |m: &SignUpResponse| { &m.name },
|m: &mut SignUpResponse| { &mut m.is_success }, |m: &mut SignUpResponse| { &mut m.name },
));
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"email",
|m: &SignUpResponse| { &m.email },
|m: &mut SignUpResponse| { &mut m.email },
)); ));
::protobuf::reflect::MessageDescriptor::new_pb_name::<SignUpResponse>( ::protobuf::reflect::MessageDescriptor::new_pb_name::<SignUpResponse>(
"SignUpResponse", "SignUpResponse",
@ -644,7 +685,8 @@ impl ::protobuf::Message for SignUpResponse {
impl ::protobuf::Clear for SignUpResponse { impl ::protobuf::Clear for SignUpResponse {
fn clear(&mut self) { fn clear(&mut self) {
self.is_success = false; self.name = false;
self.email.clear();
self.unknown_fields.clear(); self.unknown_fields.clear();
} }
} }
@ -667,31 +709,34 @@ static file_descriptor_proto_data: &'static [u8] = b"\
\x08password\x18\x03\x20\x01(\tR\x08password\"T\n\x0cSignUpParams\x12\ \x08password\x18\x03\x20\x01(\tR\x08password\"T\n\x0cSignUpParams\x12\
\x14\n\x05email\x18\x01\x20\x01(\tR\x05email\x12\x12\n\x04name\x18\x02\ \x14\n\x05email\x18\x01\x20\x01(\tR\x05email\x12\x12\n\x04name\x18\x02\
\x20\x01(\tR\x04name\x12\x1a\n\x08password\x18\x03\x20\x01(\tR\x08passwo\ \x20\x01(\tR\x04name\x12\x1a\n\x08password\x18\x03\x20\x01(\tR\x08passwo\
rd\"/\n\x0eSignUpResponse\x12\x1d\n\nis_success\x18\x01\x20\x01(\x08R\ti\ rd\":\n\x0eSignUpResponse\x12\x12\n\x04name\x18\x01\x20\x01(\x08R\x04nam\
sSuccessJ\xdb\x03\n\x06\x12\x04\0\0\x0e\x01\n\x08\n\x01\x0c\x12\x03\0\0\ e\x12\x14\n\x05email\x18\x02\x20\x01(\tR\x05emailJ\x92\x04\n\x06\x12\x04\
\x12\n\n\n\x02\x04\0\x12\x04\x02\0\x06\x01\n\n\n\x03\x04\0\x01\x12\x03\ \0\0\x0f\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\n\n\x02\x04\0\x12\x04\x02\
\x02\x08\x15\n\x0b\n\x04\x04\0\x02\0\x12\x03\x03\x04\x15\n\x0c\n\x05\x04\ \0\x06\x01\n\n\n\x03\x04\0\x01\x12\x03\x02\x08\x15\n\x0b\n\x04\x04\0\x02\
\0\x02\0\x05\x12\x03\x03\x04\n\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\x03\ \0\x12\x03\x03\x04\x15\n\x0c\n\x05\x04\0\x02\0\x05\x12\x03\x03\x04\n\n\
\x0b\x10\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x03\x13\x14\n\x0b\n\x04\x04\ \x0c\n\x05\x04\0\x02\0\x01\x12\x03\x03\x0b\x10\n\x0c\n\x05\x04\0\x02\0\
\0\x02\x01\x12\x03\x04\x04\x14\n\x0c\n\x05\x04\0\x02\x01\x05\x12\x03\x04\ \x03\x12\x03\x03\x13\x14\n\x0b\n\x04\x04\0\x02\x01\x12\x03\x04\x04\x14\n\
\x04\n\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03\x04\x0b\x0f\n\x0c\n\x05\x04\ \x0c\n\x05\x04\0\x02\x01\x05\x12\x03\x04\x04\n\n\x0c\n\x05\x04\0\x02\x01\
\0\x02\x01\x03\x12\x03\x04\x12\x13\n\x0b\n\x04\x04\0\x02\x02\x12\x03\x05\ \x01\x12\x03\x04\x0b\x0f\n\x0c\n\x05\x04\0\x02\x01\x03\x12\x03\x04\x12\
\x04\x18\n\x0c\n\x05\x04\0\x02\x02\x05\x12\x03\x05\x04\n\n\x0c\n\x05\x04\ \x13\n\x0b\n\x04\x04\0\x02\x02\x12\x03\x05\x04\x18\n\x0c\n\x05\x04\0\x02\
\0\x02\x02\x01\x12\x03\x05\x0b\x13\n\x0c\n\x05\x04\0\x02\x02\x03\x12\x03\ \x02\x05\x12\x03\x05\x04\n\n\x0c\n\x05\x04\0\x02\x02\x01\x12\x03\x05\x0b\
\x05\x16\x17\n\n\n\x02\x04\x01\x12\x04\x07\0\x0b\x01\n\n\n\x03\x04\x01\ \x13\n\x0c\n\x05\x04\0\x02\x02\x03\x12\x03\x05\x16\x17\n\n\n\x02\x04\x01\
\x01\x12\x03\x07\x08\x14\n\x0b\n\x04\x04\x01\x02\0\x12\x03\x08\x04\x15\n\ \x12\x04\x07\0\x0b\x01\n\n\n\x03\x04\x01\x01\x12\x03\x07\x08\x14\n\x0b\n\
\x0c\n\x05\x04\x01\x02\0\x05\x12\x03\x08\x04\n\n\x0c\n\x05\x04\x01\x02\0\ \x04\x04\x01\x02\0\x12\x03\x08\x04\x15\n\x0c\n\x05\x04\x01\x02\0\x05\x12\
\x01\x12\x03\x08\x0b\x10\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03\x08\x13\ \x03\x08\x04\n\n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03\x08\x0b\x10\n\x0c\n\
\x14\n\x0b\n\x04\x04\x01\x02\x01\x12\x03\t\x04\x14\n\x0c\n\x05\x04\x01\ \x05\x04\x01\x02\0\x03\x12\x03\x08\x13\x14\n\x0b\n\x04\x04\x01\x02\x01\
\x02\x01\x05\x12\x03\t\x04\n\n\x0c\n\x05\x04\x01\x02\x01\x01\x12\x03\t\ \x12\x03\t\x04\x14\n\x0c\n\x05\x04\x01\x02\x01\x05\x12\x03\t\x04\n\n\x0c\
\x0b\x0f\n\x0c\n\x05\x04\x01\x02\x01\x03\x12\x03\t\x12\x13\n\x0b\n\x04\ \n\x05\x04\x01\x02\x01\x01\x12\x03\t\x0b\x0f\n\x0c\n\x05\x04\x01\x02\x01\
\x04\x01\x02\x02\x12\x03\n\x04\x18\n\x0c\n\x05\x04\x01\x02\x02\x05\x12\ \x03\x12\x03\t\x12\x13\n\x0b\n\x04\x04\x01\x02\x02\x12\x03\n\x04\x18\n\
\x03\n\x04\n\n\x0c\n\x05\x04\x01\x02\x02\x01\x12\x03\n\x0b\x13\n\x0c\n\ \x0c\n\x05\x04\x01\x02\x02\x05\x12\x03\n\x04\n\n\x0c\n\x05\x04\x01\x02\
\x05\x04\x01\x02\x02\x03\x12\x03\n\x16\x17\n\n\n\x02\x04\x02\x12\x04\x0c\ \x02\x01\x12\x03\n\x0b\x13\n\x0c\n\x05\x04\x01\x02\x02\x03\x12\x03\n\x16\
\0\x0e\x01\n\n\n\x03\x04\x02\x01\x12\x03\x0c\x08\x16\n\x0b\n\x04\x04\x02\ \x17\n\n\n\x02\x04\x02\x12\x04\x0c\0\x0f\x01\n\n\n\x03\x04\x02\x01\x12\
\x02\0\x12\x03\r\x04\x18\n\x0c\n\x05\x04\x02\x02\0\x05\x12\x03\r\x04\x08\ \x03\x0c\x08\x16\n\x0b\n\x04\x04\x02\x02\0\x12\x03\r\x04\x12\n\x0c\n\x05\
\n\x0c\n\x05\x04\x02\x02\0\x01\x12\x03\r\t\x13\n\x0c\n\x05\x04\x02\x02\0\ \x04\x02\x02\0\x05\x12\x03\r\x04\x08\n\x0c\n\x05\x04\x02\x02\0\x01\x12\
\x03\x12\x03\r\x16\x17b\x06proto3\ \x03\r\t\r\n\x0c\n\x05\x04\x02\x02\0\x03\x12\x03\r\x10\x11\n\x0b\n\x04\
\x04\x02\x02\x01\x12\x03\x0e\x04\x15\n\x0c\n\x05\x04\x02\x02\x01\x05\x12\
\x03\x0e\x04\n\n\x0c\n\x05\x04\x02\x02\x01\x01\x12\x03\x0e\x0b\x10\n\x0c\
\n\x05\x04\x02\x02\x01\x03\x12\x03\x0e\x13\x14b\x06proto3\
"; ";
static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT; static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;

View File

@ -11,5 +11,6 @@ message SignUpParams {
string password = 3; string password = 3;
} }
message SignUpResponse { message SignUpResponse {
bool is_success = 1; bool name = 1;
string email = 2;
} }

View File

@ -1,4 +1,2 @@
mod model; mod model;
pub use model::*; pub use model::*;

View File

@ -1,49 +1,49 @@
// Auto-generated, do not edit // Auto-generated, do not edit
mod view_update; mod view_update;
pub use view_update::*; pub use view_update::*;
mod view_delete; mod view_delete;
pub use view_delete::*; pub use view_delete::*;
mod app_query; mod app_query;
pub use app_query::*; pub use app_query::*;
mod workspace_delete; mod workspace_delete;
pub use workspace_delete::*; pub use workspace_delete::*;
mod observable; mod observable;
pub use observable::*; pub use observable::*;
mod errors; mod errors;
pub use errors::*; pub use errors::*;
mod workspace_update; mod workspace_update;
pub use workspace_update::*; pub use workspace_update::*;
mod app_create; mod app_create;
pub use app_create::*; pub use app_create::*;
mod workspace_query; mod workspace_query;
pub use workspace_query::*; pub use workspace_query::*;
mod event; mod event;
pub use event::*; pub use event::*;
mod view_create; mod view_create;
pub use view_create::*; pub use view_create::*;
mod workspace_user_detail; mod workspace_user_detail;
pub use workspace_user_detail::*; pub use workspace_user_detail::*;
mod workspace_create; mod workspace_create;
pub use workspace_create::*; pub use workspace_create::*;
mod app_update; mod app_update;
pub use app_update::*; pub use app_update::*;
mod view_query; mod view_query;
pub use view_query::*; pub use view_query::*;
mod app_delete; mod app_delete;
pub use app_delete::*; pub use app_delete::*;