mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
add flowy-net crate shared code by server and client
This commit is contained in:
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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==');
|
||||||
|
@ -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"
|
||||||
|
|
||||||
|
@ -1,7 +1 @@
|
|||||||
mod response;
|
|
||||||
mod response_serde;
|
|
||||||
mod server_code;
|
|
||||||
|
|
||||||
pub use response::*;
|
|
||||||
pub use response_serde::*;
|
|
||||||
pub use server_code::*;
|
|
||||||
|
@ -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,
|
|
||||||
}
|
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
@ -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;
|
||||||
|
@ -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};
|
||||||
|
|
||||||
|
@ -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())
|
||||||
}
|
}
|
||||||
|
@ -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(()) }
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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>,
|
||||||
|
@ -16,6 +16,7 @@ members = [
|
|||||||
"flowy-document",
|
"flowy-document",
|
||||||
"flowy-editor",
|
"flowy-editor",
|
||||||
"flowy-ot",
|
"flowy-ot",
|
||||||
|
"flowy-net",
|
||||||
]
|
]
|
||||||
|
|
||||||
[profile.dev]
|
[profile.dev]
|
||||||
|
@ -1,4 +1,2 @@
|
|||||||
|
|
||||||
mod model;
|
mod model;
|
||||||
pub use model::*;
|
pub use model::*;
|
||||||
|
|
@ -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::*;
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
|
@ -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) }
|
||||||
}
|
}
|
||||||
|
@ -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) }
|
|
||||||
}
|
|
||||||
|
@ -1,4 +1,2 @@
|
|||||||
|
|
||||||
mod model;
|
mod model;
|
||||||
pub use model::*;
|
pub use model::*;
|
||||||
|
|
@ -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::*;
|
||||||
|
@ -1,4 +1,2 @@
|
|||||||
|
|
||||||
mod model;
|
mod model;
|
||||||
pub use model::*;
|
pub use model::*;
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
// Auto-generated, do not edit
|
// Auto-generated, do not edit
|
||||||
|
|
||||||
mod kv;
|
mod kv;
|
||||||
pub use kv::*;
|
pub use kv::*;
|
||||||
|
17
rust-lib/flowy-net/Cargo.toml
Normal file
17
rust-lib/flowy-net/Cargo.toml
Normal 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"]
|
30
rust-lib/flowy-net/src/errors.rs
Normal file
30
rust-lib/flowy-net/src/errors.rs
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
2
rust-lib/flowy-net/src/lib.rs
Normal file
2
rust-lib/flowy-net/src/lib.rs
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
pub mod errors;
|
||||||
|
pub mod response;
|
7
rust-lib/flowy-net/src/response/mod.rs
Normal file
7
rust-lib/flowy-net/src/response/mod.rs
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
mod response;
|
||||||
|
mod response_serde;
|
||||||
|
|
||||||
|
#[cfg(feature = "http")]
|
||||||
|
mod response_http;
|
||||||
|
|
||||||
|
pub use response::*;
|
@ -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()
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
31
rust-lib/flowy-net/src/response/response_http.rs
Normal file
31
rust-lib/flowy-net/src/response/response_http.rs
Normal 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()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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,
|
@ -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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,2 @@
|
|||||||
|
|
||||||
mod model;
|
mod model;
|
||||||
pub use model::*;
|
pub use model::*;
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
// Auto-generated, do not edit
|
// Auto-generated, do not edit
|
||||||
|
|
||||||
mod subject;
|
mod subject;
|
||||||
pub use subject::*;
|
pub use subject::*;
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
|
||||||
|
@ -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,
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,2 @@
|
|||||||
|
|
||||||
mod model;
|
mod model;
|
||||||
pub use model::*;
|
pub use model::*;
|
||||||
|
|
@ -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::*;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,2 @@
|
|||||||
|
|
||||||
mod model;
|
mod model;
|
||||||
pub use model::*;
|
pub use model::*;
|
||||||
|
|
@ -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::*;
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
|
||||||
|
Reference in New Issue
Block a user