Compare commits

...

38 Commits

Author SHA1 Message Date
be2be6107e event is added 2022-08-11 05:53:17 +00:00
cc13112acc refactoring 2022-08-11 01:04:13 +00:00
64c2dd0164 name is changed 2022-08-10 10:14:10 +00:00
8b8b5f7acf member is added 2022-08-10 08:19:10 +00:00
f20d3aa7e1 site is changed 2022-08-10 02:32:52 +00:00
56044e8e37 site is modified 2022-08-10 01:49:44 +00:00
90d2fb4ae0 site is added 2022-08-08 08:39:49 +00:00
3e2df9d4a7 site is added 2022-08-08 08:24:08 +00:00
047455a888 name is changed 2022-08-08 07:13:21 +00:00
eac2bea1e5 bug fixed 2022-08-08 02:44:11 +00:00
62cff75a51 name is changed 2022-08-06 04:00:35 +00:00
b84e98326c name is changed 2022-08-06 03:57:28 +00:00
ade8676551 configuration of devcontainer is changed 2022-08-05 07:31:34 +00:00
dafa913f51 constants are added 2022-08-05 04:57:07 +00:00
4368079dfc InvalidParams is removed 2022-08-05 03:43:52 +00:00
21ed13a3af InvalidParams is added 2022-08-04 11:41:02 +00:00
d0e1e2cf46 from i32 is added 2022-08-04 09:13:23 +00:00
40fe5e8e86 message is required 2022-08-04 08:51:38 +00:00
5aae301242 invalid params is added 2022-08-04 08:45:34 +00:00
63748f4d80 responses are modified 2022-08-03 07:26:34 +00:00
174ba470ed responses are modified 2022-08-03 06:47:15 +00:00
e5f4b3c8c2 display trait is added 2022-08-03 06:19:47 +00:00
8b28a1b19c subjects are changed 2022-08-02 08:44:57 +00:00
f220043646 version up 2022-08-02 07:46:37 +00:00
ea0e9db16f variable name is changed 2022-07-27 07:41:48 +00:00
578c3f8cc3 name is changed 2022-07-27 07:03:02 +00:00
ae71cd9e1d client is changed 2022-07-27 06:46:12 +00:00
9390008044 common is added 2022-07-25 08:14:02 +00:00
f8373270e9 protocols are modified 2022-07-17 05:47:16 +00:00
4f52195ab1 captcha is added 2022-07-15 06:47:37 +00:00
8321416df3 serde_json is added 2022-07-15 06:36:05 +00:00
a572e8f45d client info is added 2022-07-15 06:14:26 +00:00
d65e294c42 site_url is added 2022-07-15 04:13:28 +00:00
cabe06d9b9 site_url is added 2022-07-15 04:10:17 +00:00
8616b0b9b1 ss-member-identity is added 2022-07-13 08:44:58 +00:00
89522014a0 names of subject are added 2022-07-12 06:50:40 +00:00
e332e8976d bug fixed 2022-07-12 06:44:50 +00:00
610dac69a8 initialized 2022-07-12 06:43:07 +00:00
36 changed files with 1540 additions and 0 deletions

8
.devcontainer/Dockerfile Normal file
View File

@ -0,0 +1,8 @@
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.195.0/containers/rust/.devcontainer/base.Dockerfile
# [Choice] Debian OS version (use bullseye on local arm64/Apple Silicon): buster, bullseye
ARG VARIANT="bullseye"
FROM mcr.microsoft.com/vscode/devcontainers/rust:1-${VARIANT}
# [Optional] Uncomment this section to install additional packages.
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
# && apt-get -y install --no-install-recommends <your-package-list-here>

View File

@ -0,0 +1,60 @@
// For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.195.0/containers/rust
{
"name": "beteran-protobuf-rust",
"build": {
"dockerfile": "Dockerfile",
"args": {
// Use the VARIANT arg to pick a Debian OS version: buster, bullseye
// Use bullseye when on local on arm64/Apple Silicon.
"VARIANT": "bullseye"
}
},
"runArgs": [
"--cap-add=SYS_PTRACE",
"--security-opt",
"seccomp=unconfined"
],
// Configure tool-specific properties.
"customizations": {
// Configure properties specific to VS Code.
"vscode": {
// Set *default* container specific settings.json values on container create.
"settings": {
"lldb.verboseLogging": true,
"lldb.executable": "/usr/bin/lldb",
"search.exclude": {
"**/target": true
},
// VS Code don't watch files under ./target
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/.git/subtree-cache/**": true,
"**/target/**": true
},
"rust-analyzer.checkOnSave.command": "clippy",
"editor.tabSize": 2,
"editor.insertSpaces": true,
"editor.formatOnSave": true
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"donjayamanne.githistory",
"eamodio.gitlens",
"matklad.rust-analyzer",
"mhutchie.git-graph",
"ms-azuretools.vscode-docker",
"mutantdino.resourcemonitor",
"serayuzgur.crates",
"tamasfe.even-better-toml",
"vadimcn.vscode-lldb"
]
}
},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "",
// Comment out to run as root instead.
"remoteUser": "vscode"
}

View File

@ -0,0 +1,7 @@
[toolchain]
channel = "stable"
profile = "minimal"
components = ["clippy", "rustfmt"]
targets = [
]

7
.gitignore vendored Normal file
View File

@ -0,0 +1,7 @@
.DS_Store
/build
# Added by cargo
/target
Cargo.lock

75
.rustfmt.toml Normal file
View File

@ -0,0 +1,75 @@
# https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=
array_width = 60
attr_fn_like_width = 70
binop_separator = "Front" # "Front", "Back"
blank_lines_lower_bound = 0
blank_lines_upper_bound = 1
brace_style = "SameLineWhere" #"AlwaysNextLine", "PreferSameLine", "SameLineWhere"
chain_width = 60
color = "Auto" #"Auto", "Always", "Never"
combine_control_expr = true # true, false
comment_width = 80
condense_wildcard_suffixes = false # true, false
control_brace_style = "AlwaysSameLine" # "AlwaysNextLine", "AlwaysSameLine", "ClosingNextLine"
disable_all_formatting = false # true, false
edition = "2015" # "2015", "2018", "2021"
empty_item_single_line = true # true, false
enum_discrim_align_threshold = 0
error_on_line_overflow = false # true, false
error_on_unformatted = false # true, false
fn_args_layout = "Tall" # "Compressed", "Tall", "Vertical"
fn_call_width = 60
fn_single_line = false # true, false
force_explicit_abi = true # true, false
force_multiline_blocks = false # true, false
format_code_in_doc_comments = false # true, false
format_generated_files = false # true, false
format_macro_matchers = false # true, false
format_macro_bodies = true # true, false
format_strings = false # true, false
group_imports = "Preserve" # "Preserve", "StdExternalCrate"
hard_tabs = false # true, false
hex_literal_case = "Preserve" # "Upper", "Lower"
hide_parse_errors = false # true, false
ignore = []
imports_indent = "Block" # "Block", "Visual"
imports_layout = "Mixed" # "Horizontal", "HorizontalVertical", "Mixed", "Vertical"
indent_style = "Block" # "Block", "Visual"
inline_attribute_width = 0
license_template_path = ""
match_arm_blocks = true # true, false
match_arm_leading_pipes = "Never" # "Always", "Never", "Preserve"
match_block_trailing_comma = false # true, false
max_width = 100
merge_derives = true # true, false
imports_granularity = "Preserve" # "Preserve", "Crate", "Module", "Item", "One"
merge_imports = false # true, false
newline_style = "Auto" # "Auto", "Native", "Unix", "Windows"
normalize_comments = false # true, false
normalize_doc_attributes = false # true, false
overflow_delimited_expr = false # true, false
remove_nested_parens = true # true, false
reorder_impl_items = false # true, false
reorder_imports = true # true, false
reorder_modules = true # true, false
report_fixme = "Never" # "Always", "Unnumbered", "Never"
report_todo = "Never" # "Always", "Unnumbered", "Never"
skip_children = false # true, false
single_line_if_else_max_width = 50
space_after_colon = true # true, false
space_before_colon = false # true, false
spaces_around_ranges = false # true, false
struct_field_align_threshold = 0
struct_lit_single_line = true # true, false
struct_lit_width = 18
struct_variant_width = 35
tab_spaces = 2
trailing_comma = "Vertical" # "Always", "Never", "Vertical"
trailing_semicolon = true # true, false
type_punctuation_density = "Wide" # "Compressed", "Wide"
unstable_features = false # true, false
use_field_init_shorthand = false # true, false
use_small_heuristics = "Default" # "Default", "Off", "Max"
use_try_shorthand = false # true, false
where_single_line = false # true, false
wrap_comments = false # true, false

15
Cargo.toml Normal file
View File

@ -0,0 +1,15 @@
[package]
name = "beteran-protobuf-rust"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
name = "beteran_protobuf_rust"
path = "./src/lib.rs"
[dependencies]
prost = { version = "0" }
serde = { version = "1", features = ["derive"] }
serde_json = { version = "1" }
const_format = { version = "0" }

View File

@ -0,0 +1,43 @@
use crate::protobuf::rpc;
const SUBJECT: &str = "bet.beteran.c2se.backend.identity";
pub const SUBJECT_CHECK_USERNAME_FOR_DUPLICATION: &str =
const_format::concatcp!(SUBJECT, ".CheckUsernameForDuplication");
/// subject = bet.beteran.c2se.backend.identity.CheckUsernameForDuplication;
pub const SUBJECT_CHECK_NICKNAME_FOR_DUPLICATION: &str =
const_format::concatcp!(SUBJECT, ".CheckNicknameForDuplication");
/// subject = bet.beteran.c2se.backend.identity.CheckNicknameForDuplication;
pub const SUBJECT_CAPTCHA: &str = const_format::concatcp!(SUBJECT, ".Captcha");
/// subject = bet.beteran.c2se.backend.identity.Captcha
pub const SUBJECT_SIGNIN: &str = const_format::concatcp!(SUBJECT, ".Signin");
/// subject = bet.beteran.c2se.backend.identity.Signin
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SigninRequest {
#[prost(string, tag = "1")]
pub security_code_hash: ::prost::alloc::string::String,
#[prost(string, tag = "2")]
pub security_code: ::prost::alloc::string::String,
#[prost(string, tag = "3")]
pub username: ::prost::alloc::string::String,
#[prost(string, tag = "4")]
pub password: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SigninResponse {
#[prost(message, optional, tag = "1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag = "2")]
pub result: ::core::option::Option<signin_response::Result>,
}
/// Nested message and enum types in `SigninResponse`.
pub mod signin_response {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(string, tag = "1")]
pub access_token: ::prost::alloc::string::String,
}
}

101
src/c2se/backend/member.rs Normal file
View File

@ -0,0 +1,101 @@
use crate::protobuf::pagination;
use crate::protobuf::rpc;
use crate::models::member;
const SUBJECT: &str = "bet.beteran.c2se.backend.member";
pub const SUBJECT_LIST_MEMBERS: &str = const_format::concatcp!(SUBJECT, ".ListMembers");
/// subject = bet.beteran.c2se.backend.member.ListMembers
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListMembersRequest {
#[prost(message, optional, tag = "1")]
pub pagination: ::core::option::Option<pagination::Pagination>,
#[prost(message, repeated, tag = "2")]
pub searches: ::prost::alloc::vec::Vec<pagination::Search>,
#[prost(message, repeated, tag = "3")]
pub sorts: ::prost::alloc::vec::Vec<pagination::Sort>,
#[prost(string, optional, tag="4")]
pub site_id: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="5")]
pub member_class_id: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="6")]
pub member_level_id: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="7")]
pub referrer_member_id: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="8")]
pub username_like: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="9")]
pub nickname_like: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="10")]
pub mobile_phone_number_like: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="11")]
pub last_signined_ip: ::core::option::Option<::prost::alloc::string::String>,
#[prost(enumeration="member::MemberState", optional, tag="12")]
pub state: ::core::option::Option<i32>,
#[prost(uint64, optional, tag="13")]
pub deleted_at: ::core::option::Option<u64>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListMembersResponse {
#[prost(message, optional, tag = "1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag = "2")]
pub result: ::core::option::Option<list_members_response::Result>,
}
/// Nested message and enum types in `ListMembersResponse`.
pub mod list_members_response {
use crate::models::member;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(message, repeated, tag = "1")]
pub members: ::prost::alloc::vec::Vec<member::MemberModel>,
}
}
pub const SUBJECT_GET_MEMBER: &str = const_format::concatcp!(SUBJECT, ".GetMember");
/// subject = bet.beteran.c2se.backend.member.GetMember
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetMemberRequest {
#[prost(string, tag = "1")]
pub id: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetMemberResponse {
#[prost(message, optional, tag = "1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag = "2")]
pub result: ::core::option::Option<get_member_response::Result>,
}
/// Nested message and enum types in `GetMemberResponse`.
pub mod get_member_response {
use crate::models::member;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(message, optional, tag = "1")]
pub member: ::core::option::Option<member::MemberModel>,
}
}
pub const SUBJECT_GET_MEMBER_BY_USERNAME: &str =
const_format::concatcp!(SUBJECT, ".GetMemberByUsername");
/// subject = bet.beteran.c2se.backend.member.GetMemberByUsername
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetMemberByUsernameRequest {
#[prost(string, tag = "1")]
pub username: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetMemberByUsernameResponse {
#[prost(message, optional, tag = "1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag = "2")]
pub result: ::core::option::Option<get_member_by_username_response::Result>,
}
/// Nested message and enum types in `GetMemberByUsernameResponse`.
pub mod get_member_by_username_response {
use crate::models::member;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(message, optional, tag = "1")]
pub member: ::core::option::Option<member::MemberModel>,
}
}

3
src/c2se/backend/mod.rs Normal file
View File

@ -0,0 +1,3 @@
pub mod identity;
pub mod member;
pub mod site;

142
src/c2se/backend/site.rs Normal file
View File

@ -0,0 +1,142 @@
use crate::protobuf::pagination;
use crate::protobuf::rpc;
const SUBJECT: &str = "bet.beteran.c2se.backend.site";
pub const SUBJECT_LIST_SITES: &str = const_format::concatcp!(SUBJECT, ".ListSites");
/// subject = bet.beteran.c2se.backend.site.ListSites
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListSitesRequest {
#[prost(message, optional, tag = "1")]
pub pagination: ::core::option::Option<pagination::Pagination>,
#[prost(message, repeated, tag = "2")]
pub searches: ::prost::alloc::vec::Vec<pagination::Search>,
#[prost(message, repeated, tag = "3")]
pub sorts: ::prost::alloc::vec::Vec<pagination::Sort>,
#[prost(string, optional, tag="4")]
pub url_like: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="5")]
pub name_like: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="6")]
pub path_like: ::core::option::Option<::prost::alloc::string::String>,
#[prost(bool, optional, tag="7")]
pub show: ::core::option::Option<bool>,
#[prost(bool, optional, tag="8")]
pub can_use: ::core::option::Option<bool>,
#[prost(string, optional, tag="9")]
pub memo_like: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListSitesResponse {
#[prost(message, optional, tag = "1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag = "2")]
pub result: ::core::option::Option<list_sites_response::Result>,
}
/// Nested message and enum types in `ListSitesResponse`.
pub mod list_sites_response {
use crate::models::domain;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(message, repeated, tag = "1")]
pub sites: ::prost::alloc::vec::Vec<domain::Site>,
}
}
pub const SUBJECT_CREATE_SITE: &str = const_format::concatcp!(SUBJECT, ".CreateSite");
/// subject = bet.beteran.c2se.backend.site.CreateSite
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CreateSiteRequest {
#[prost(string, tag="1")]
pub url: ::prost::alloc::string::String,
#[prost(string, optional, tag="2")]
pub name: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="3")]
pub path: ::core::option::Option<::prost::alloc::string::String>,
#[prost(bool, tag="4")]
pub show: bool,
#[prost(bool, tag="5")]
pub can_use: bool,
#[prost(string, optional, tag="6")]
pub memo: ::core::option::Option<::prost::alloc::string::String>,
#[prost(uint64, optional, tag="7")]
pub expires_at: ::core::option::Option<u64>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CreateSiteResponse {
#[prost(message, optional, tag = "1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag = "2")]
pub result: ::core::option::Option<create_site_response::Result>,
}
/// Nested message and enum types in `CreateSiteResponse`.
pub mod create_site_response {
use crate::models::domain;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(message, optional, tag = "1")]
pub site: ::core::option::Option<domain::Site>,
}
}
pub const SUBJECT_UPDATE_SITE: &str = const_format::concatcp!(SUBJECT, ".UpdateSite");
/// subject = bet.beteran.c2se.backend.site.UpdateSite
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateSiteRequest {
#[prost(string, tag="1")]
pub id: ::prost::alloc::string::String,
#[prost(string, tag="2")]
pub url: ::prost::alloc::string::String,
#[prost(string, optional, tag="3")]
pub name: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="4")]
pub path: ::core::option::Option<::prost::alloc::string::String>,
#[prost(bool, tag="5")]
pub show: bool,
#[prost(bool, tag="6")]
pub can_use: bool,
#[prost(string, optional, tag="7")]
pub memo: ::core::option::Option<::prost::alloc::string::String>,
#[prost(uint64, optional, tag="8")]
pub expires_at: ::core::option::Option<u64>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateSiteResponse {
#[prost(message, optional, tag = "1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag = "2")]
pub result: ::core::option::Option<update_site_response::Result>,
}
/// Nested message and enum types in `UpdateSiteResponse`.
pub mod update_site_response {
use crate::models::domain;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(message, optional, tag = "1")]
pub site: ::core::option::Option<domain::Site>,
}
}
pub const SUBJECT_DELETE_SITE: &str = const_format::concatcp!(SUBJECT, ".DeleteSite");
/// subject = bet.beteran.c2se.backend.site.DeleteSite
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DeleteSiteRequest {
#[prost(string, tag = "1")]
pub id: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DeleteSiteResponse {
#[prost(message, optional, tag = "1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag = "2")]
pub result: ::core::option::Option<delete_site_response::Result>,
}
/// Nested message and enum types in `DeleteSiteResponse`.
pub mod delete_site_response {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {}
}

View File

@ -0,0 +1,71 @@
use crate::protobuf::rpc;
const SUBJECT: &str = "bet.beteran.c2se.common.identity";
pub const SUBJECT_CHECK_USERNAME_FOR_DUPLICATION: &str =
const_format::concatcp!(SUBJECT, ".CheckUsernameForDuplication");
/// subject = bet.beteran.c2se.common.identity.CheckUsernameForDuplication;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CheckUsernameForDuplicationRequest {
#[prost(string, tag = "1")]
pub username: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CheckUsernameForDuplicationResponse {
#[prost(message, optional, tag = "1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag = "2")]
pub result: ::core::option::Option<check_username_for_duplication_response::Result>,
}
/// Nested message and enum types in `CheckUsernameForDuplicationResponse`.
pub mod check_username_for_duplication_response {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(bool, tag = "1")]
pub duplicated: bool,
}
}
pub const SUBJECT_CHECK_NICKNAME_FOR_DUPLICATION: &str =
const_format::concatcp!(SUBJECT, ".CheckNicknameForDuplication");
/// subject = bet.beteran.c2se.common.identity.CheckNicknameForDuplication;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CheckNicknameForDuplicationRequest {
#[prost(string, tag = "1")]
pub nickname: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CheckNicknameForDuplicationResponse {
#[prost(message, optional, tag = "1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag = "2")]
pub result: ::core::option::Option<check_nickname_for_duplication_response::Result>,
}
/// Nested message and enum types in `CheckNicknameForDuplicationResponse`.
pub mod check_nickname_for_duplication_response {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(bool, tag = "1")]
pub duplicated: bool,
}
}
pub const SUBJECT_CAPTCHA: &str = const_format::concatcp!(SUBJECT, ".Captcha");
/// subject = bet.beteran.c2se.common.identity.Captcha
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CaptchaRequest {}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CaptchaResponse {
#[prost(message, optional, tag = "1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag = "2")]
pub result: ::core::option::Option<captcha_response::Result>,
}
/// Nested message and enum types in `CaptchaResponse`.
pub mod captcha_response {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(string, tag = "1")]
pub security_code_hash: ::prost::alloc::string::String,
#[prost(string, tag = "2")]
pub image: ::prost::alloc::string::String,
}
}

1
src/c2se/common/mod.rs Normal file
View File

@ -0,0 +1 @@
pub mod identity;

1
src/c2se/core/mod.rs Normal file
View File

@ -0,0 +1 @@
pub mod network;

3
src/c2se/core/network.rs Normal file
View File

@ -0,0 +1,3 @@
const HEADER: &str = "bet.beteran.c2se.core.network";
pub const HEADER_CLIENT: &str = const_format::concatcp!(HEADER, ".Client");

View File

@ -0,0 +1,43 @@
use crate::protobuf::rpc;
const SUBJECT: &str = "bet.beteran.c2se.frontend.identity";
pub const SUBJECT_CHECK_USERNAME_FOR_DUPLICATION: &str =
const_format::concatcp!(SUBJECT, ".CheckUsernameForDuplication");
/// subject = bet.beteran.c2se.frontend.identity.CheckUsernameForDuplication;
pub const SUBJECT_CHECK_NICKNAME_FOR_DUPLICATION: &str =
const_format::concatcp!(SUBJECT, ".CheckNicknameForDuplication");
/// subject = bet.beteran.c2se.frontend.identity.CheckNicknameForDuplication;
pub const SUBJECT_CAPTCHA: &str = const_format::concatcp!(SUBJECT, ".Captcha");
/// subject = bet.beteran.c2se.frontend.identity.Captcha
pub const SUBJECT_SIGNIN: &str = const_format::concatcp!(SUBJECT, ".Signin");
/// subject = bet.beteran.c2se.frontend.identity.Signin
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SigninRequest {
#[prost(string, tag = "1")]
pub security_code_hash: ::prost::alloc::string::String,
#[prost(string, tag = "2")]
pub security_code: ::prost::alloc::string::String,
#[prost(string, tag = "3")]
pub username: ::prost::alloc::string::String,
#[prost(string, tag = "4")]
pub password: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SigninResponse {
#[prost(message, optional, tag = "1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag = "2")]
pub result: ::core::option::Option<signin_response::Result>,
}
/// Nested message and enum types in `SigninResponse`.
pub mod signin_response {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(string, tag = "1")]
pub access_token: ::prost::alloc::string::String,
}
}

1
src/c2se/frontend/mod.rs Normal file
View File

@ -0,0 +1 @@
pub mod identity;

11
src/c2se/mod.rs Normal file
View File

@ -0,0 +1,11 @@
//!
//!
///
pub mod backend;
///
pub mod common;
///
pub mod core;
///
pub mod frontend;

12
src/lib.rs Normal file
View File

@ -0,0 +1,12 @@
//!
//!
#![deny(missing_docs)]
#![deny(missing_debug_implementations)]
#![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
pub mod c2se;
pub mod models;
pub mod protobuf;
pub mod se2c;
pub mod ss;

1
src/models/core/mod.rs Normal file
View File

@ -0,0 +1 @@
pub mod network;

View File

@ -0,0 +1,11 @@
use serde::{Deserialize, Serialize};
#[derive(Clone, PartialEq, ::prost::Message, Serialize, Deserialize)]
pub struct Client {
#[prost(string, tag = "1")]
pub client_ip: ::prost::alloc::string::String,
#[prost(string, optional, tag = "2")]
pub site_url: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag = "3")]
pub access_token: ::core::option::Option<::prost::alloc::string::String>,
}

23
src/models/domain.rs Normal file
View File

@ -0,0 +1,23 @@
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Site {
#[prost(string, tag="1")]
pub id: ::prost::alloc::string::String,
#[prost(string, tag="2")]
pub url: ::prost::alloc::string::String,
#[prost(string, optional, tag="3")]
pub name: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="4")]
pub path: ::core::option::Option<::prost::alloc::string::String>,
#[prost(bool, tag="5")]
pub show: bool,
#[prost(bool, tag="6")]
pub can_use: bool,
#[prost(string, optional, tag="7")]
pub memo: ::core::option::Option<::prost::alloc::string::String>,
#[prost(uint64, optional, tag="8")]
pub expires_at: ::core::option::Option<u64>,
#[prost(uint64, tag="9")]
pub created_at: u64,
#[prost(uint64, tag="10")]
pub updated_at: u64,
}

126
src/models/member.rs Normal file
View File

@ -0,0 +1,126 @@
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MemberClass {
#[prost(string, tag = "1")]
pub id: ::prost::alloc::string::String,
#[prost(string, optional, tag="2")]
pub parent_id: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, tag = "3")]
pub name: ::prost::alloc::string::String,
#[prost(uint64, tag = "4")]
pub created_at: u64,
#[prost(uint64, tag = "5")]
pub updated_at: u64,
#[prost(uint64, optional, tag = "6")]
pub deleted_at: ::core::option::Option<u64>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MemberLevel {
#[prost(string, tag = "1")]
pub id: ::prost::alloc::string::String,
#[prost(string, tag = "2")]
pub name: ::prost::alloc::string::String,
#[prost(uint32, tag="3")]
pub sort_order: u32,
#[prost(uint64, tag = "4")]
pub created_at: u64,
#[prost(uint64, tag = "5")]
pub updated_at: u64,
#[prost(uint64, optional, tag = "6")]
pub deleted_at: ::core::option::Option<u64>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Member {
#[prost(string, tag="1")]
pub id: ::prost::alloc::string::String,
#[prost(string, tag="2")]
pub site_id: ::prost::alloc::string::String,
#[prost(string, tag="3")]
pub member_class_id: ::prost::alloc::string::String,
#[prost(string, tag="4")]
pub member_level_id: ::prost::alloc::string::String,
#[prost(string, optional, tag="5")]
pub referrer_member_id: ::core::option::Option<::prost::alloc::string::String>,
#[prost(uint64, tag="6")]
pub referred_count: u64,
#[prost(string, tag="7")]
pub username: ::prost::alloc::string::String,
#[prost(string, tag="8")]
pub nickname: ::prost::alloc::string::String,
#[prost(string, optional, tag="9")]
pub mobile_phone_number: ::core::option::Option<::prost::alloc::string::String>,
#[prost(enumeration="MemberState", tag="10")]
pub state: i32,
#[prost(uint64, optional, tag="11")]
pub state_changed_at: ::core::option::Option<u64>,
#[prost(string, optional, tag="12")]
pub last_signined_ip: ::core::option::Option<::prost::alloc::string::String>,
#[prost(uint64, optional, tag="13")]
pub last_signined_at: ::core::option::Option<u64>,
#[prost(uint64, tag="14")]
pub created_at: u64,
#[prost(uint64, tag="15")]
pub updated_at: u64,
#[prost(uint64, optional, tag="16")]
pub deleted_at: ::core::option::Option<u64>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MemberModel {
#[prost(string, tag="1")]
pub id: ::prost::alloc::string::String,
#[prost(message, optional, tag="2")]
pub site: ::core::option::Option<super::domain::Site>,
#[prost(message, optional, tag="3")]
pub member_class: ::core::option::Option<MemberClass>,
#[prost(message, optional, tag="4")]
pub member_level: ::core::option::Option<MemberLevel>,
#[prost(message, optional, tag="5")]
pub referrer_member: ::core::option::Option<Member>,
#[prost(uint64, tag="6")]
pub referred_count: u64,
#[prost(string, tag="7")]
pub username: ::prost::alloc::string::String,
#[prost(string, tag="8")]
pub nickname: ::prost::alloc::string::String,
#[prost(string, optional, tag="9")]
pub mobile_phone_number: ::core::option::Option<::prost::alloc::string::String>,
#[prost(enumeration="MemberState", tag="10")]
pub state: i32,
#[prost(uint64, optional, tag="11")]
pub state_changed_at: ::core::option::Option<u64>,
#[prost(string, optional, tag="12")]
pub last_signined_ip: ::core::option::Option<::prost::alloc::string::String>,
#[prost(uint64, optional, tag="13")]
pub last_signined_at: ::core::option::Option<u64>,
#[prost(uint64, tag="14")]
pub created_at: u64,
#[prost(uint64, tag="15")]
pub updated_at: u64,
#[prost(uint64, optional, tag="16")]
pub deleted_at: ::core::option::Option<u64>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum MemberState {
None = 0,
Normal = 1,
Pending = 2,
Withdrawal = 3,
Dormancy = 4,
Blacklist = 5,
Suspended = 6,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MemberSession {
#[prost(string, tag = "1")]
pub id: ::prost::alloc::string::String,
#[prost(message, optional, tag = "2")]
pub member: ::core::option::Option<Member>,
#[prost(string, tag = "3")]
pub data: ::prost::alloc::string::String,
#[prost(uint64, tag = "4")]
pub last_accessed_at: u64,
#[prost(uint64, tag = "5")]
pub expires_at: u64,
#[prost(uint64, tag = "6")]
pub created_at: u64,
}

4
src/models/mod.rs Normal file
View File

@ -0,0 +1,4 @@
pub mod core;
pub mod domain;
pub mod member;
pub mod rbac;

57
src/models/rbac.rs Normal file
View File

@ -0,0 +1,57 @@
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Resource {
#[prost(string, tag = "1")]
pub id: ::prost::alloc::string::String,
#[prost(message, optional, boxed, tag = "2")]
pub parent: ::core::option::Option<::prost::alloc::boxed::Box<Resource>>,
#[prost(string, tag = "3")]
pub name: ::prost::alloc::string::String,
#[prost(string, tag = "4")]
pub key: ::prost::alloc::string::String,
#[prost(string, tag = "5")]
pub description: ::prost::alloc::string::String,
#[prost(bool, tag = "6")]
pub can_use: bool,
#[prost(uint64, tag = "7")]
pub created_at: u64,
#[prost(uint64, tag = "8")]
pub updated_at: u64,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ResourceAction {
#[prost(string, tag = "1")]
pub id: ::prost::alloc::string::String,
#[prost(message, optional, tag = "2")]
pub resource: ::core::option::Option<Resource>,
#[prost(string, tag = "3")]
pub name: ::prost::alloc::string::String,
#[prost(string, tag = "4")]
pub key: ::prost::alloc::string::String,
#[prost(string, tag = "5")]
pub description: ::prost::alloc::string::String,
#[prost(bool, tag = "6")]
pub can_use: bool,
#[prost(uint64, tag = "7")]
pub created_at: u64,
#[prost(uint64, tag = "8")]
pub updated_at: u64,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Role {
#[prost(string, tag = "1")]
pub id: ::prost::alloc::string::String,
#[prost(message, optional, boxed, tag = "2")]
pub parent: ::core::option::Option<::prost::alloc::boxed::Box<Role>>,
#[prost(string, tag = "3")]
pub name: ::prost::alloc::string::String,
#[prost(string, tag = "4")]
pub key: ::prost::alloc::string::String,
#[prost(string, tag = "5")]
pub description: ::prost::alloc::string::String,
#[prost(bool, tag = "6")]
pub can_use: bool,
#[prost(uint64, tag = "7")]
pub created_at: u64,
#[prost(uint64, tag = "8")]
pub updated_at: u64,
}

2
src/protobuf/mod.rs Normal file
View File

@ -0,0 +1,2 @@
pub mod pagination;
pub mod rpc;

View File

@ -0,0 +1,27 @@
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Pagination {
#[prost(uint32, optional, tag="1")]
pub page: ::core::option::Option<u32>,
#[prost(uint32, optional, tag="2")]
pub page_size: ::core::option::Option<u32>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Search {
#[prost(string, tag="1")]
pub key: ::prost::alloc::string::String,
#[prost(string, tag="2")]
pub value: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Sort {
#[prost(string, tag="1")]
pub by: ::prost::alloc::string::String,
#[prost(enumeration="SortOrder", tag="2")]
pub order: i32,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum SortOrder {
Asc = 0,
Desc = 1,
}

175
src/protobuf/rpc.rs Normal file
View File

@ -0,0 +1,175 @@
use std::fmt;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Error {
#[prost(int32, tag = "1")]
pub code: i32,
#[prost(string, tag = "2")]
pub message: ::prost::alloc::string::String,
#[prost(bytes = "vec", optional, tag = "3")]
pub data: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"Error code: {}, message: {:?}, data: {:?}",
self.code, self.message, self.data
)
}
}
impl Error {
pub const PARSE: i32 = -32700;
pub const INVALID_REQUEST: i32 = -32600;
pub const INVALID_PARAMS: i32 = -32602;
pub const INTERNAL: i32 = -32603;
pub const SERVER_00: i32 = -32000;
pub const SERVER_01: i32 = -32001;
pub const SERVER_02: i32 = -32002;
pub const SERVER_03: i32 = -32003;
pub const SERVER_04: i32 = -32004;
pub const SERVER_05: i32 = -32005;
pub const SERVER_06: i32 = -32006;
pub const SERVER_07: i32 = -32007;
pub const SERVER_08: i32 = -32008;
pub const SERVER_09: i32 = -32009;
pub const SERVER_10: i32 = -32010;
pub const SERVER_11: i32 = -32011;
pub const SERVER_12: i32 = -32012;
pub const SERVER_13: i32 = -32013;
pub const SERVER_14: i32 = -32014;
pub const SERVER_15: i32 = -32015;
pub const SERVER_16: i32 = -32016;
pub const SERVER_17: i32 = -32017;
pub const SERVER_18: i32 = -32018;
pub const SERVER_19: i32 = -32019;
pub const SERVER_20: i32 = -32020;
pub const SERVER_21: i32 = -32021;
pub const SERVER_22: i32 = -32022;
pub const SERVER_23: i32 = -32023;
pub const SERVER_24: i32 = -32024;
pub const SERVER_25: i32 = -32025;
pub const SERVER_26: i32 = -32026;
pub const SERVER_27: i32 = -32027;
pub const SERVER_28: i32 = -32028;
pub const SERVER_29: i32 = -32029;
pub const SERVER_30: i32 = -32030;
pub const SERVER_31: i32 = -32031;
pub const SERVER_32: i32 = -32032;
pub const SERVER_33: i32 = -32033;
pub const SERVER_34: i32 = -32034;
pub const SERVER_35: i32 = -32035;
pub const SERVER_36: i32 = -32036;
pub const SERVER_37: i32 = -32037;
pub const SERVER_38: i32 = -32038;
pub const SERVER_39: i32 = -32039;
pub const SERVER_40: i32 = -32040;
pub const SERVER_41: i32 = -32041;
pub const SERVER_42: i32 = -32042;
pub const SERVER_43: i32 = -32043;
pub const SERVER_44: i32 = -32044;
pub const SERVER_45: i32 = -32045;
pub const SERVER_46: i32 = -32046;
pub const SERVER_47: i32 = -32047;
pub const SERVER_48: i32 = -32048;
pub const SERVER_49: i32 = -32049;
pub const SERVER_50: i32 = -32050;
pub const SERVER_51: i32 = -32051;
pub const SERVER_52: i32 = -32052;
pub const SERVER_53: i32 = -32053;
pub const SERVER_54: i32 = -32054;
pub const SERVER_55: i32 = -32055;
pub const SERVER_56: i32 = -32056;
pub const SERVER_57: i32 = -32057;
pub const SERVER_58: i32 = -32058;
pub const SERVER_59: i32 = -32059;
pub const SERVER_60: i32 = -32060;
pub const SERVER_61: i32 = -32061;
pub const SERVER_62: i32 = -32062;
pub const SERVER_63: i32 = -32063;
pub const SERVER_64: i32 = -32064;
pub const SERVER_65: i32 = -32065;
pub const SERVER_66: i32 = -32066;
pub const SERVER_67: i32 = -32067;
pub const SERVER_68: i32 = -32068;
pub const SERVER_69: i32 = -32069;
pub const SERVER_70: i32 = -32070;
pub const SERVER_71: i32 = -32071;
pub const SERVER_72: i32 = -32072;
pub const SERVER_73: i32 = -32073;
pub const SERVER_74: i32 = -32074;
pub const SERVER_75: i32 = -32075;
pub const SERVER_76: i32 = -32076;
pub const SERVER_77: i32 = -32077;
pub const SERVER_78: i32 = -32078;
pub const SERVER_79: i32 = -32079;
pub const SERVER_80: i32 = -32080;
pub const SERVER_81: i32 = -32081;
pub const SERVER_82: i32 = -32082;
pub const SERVER_83: i32 = -32083;
pub const SERVER_84: i32 = -32084;
pub const SERVER_85: i32 = -32085;
pub const SERVER_86: i32 = -32086;
pub const SERVER_87: i32 = -32087;
pub const SERVER_88: i32 = -32088;
pub const SERVER_89: i32 = -32089;
pub const SERVER_90: i32 = -32090;
pub const SERVER_91: i32 = -32091;
pub const SERVER_92: i32 = -32092;
pub const SERVER_93: i32 = -32093;
pub const SERVER_94: i32 = -32094;
pub const SERVER_95: i32 = -32095;
pub const SERVER_96: i32 = -32096;
pub const SERVER_97: i32 = -32097;
pub const SERVER_98: i32 = -32098;
pub const SERVER_99: i32 = -32099;
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct InvalidParamsDetail {
#[prost(string, tag = "1")]
pub location: ::prost::alloc::string::String,
#[prost(string, tag = "2")]
pub param: ::prost::alloc::string::String,
#[prost(string, tag = "3")]
pub value: ::prost::alloc::string::String,
#[prost(enumeration = "InvalidParamsType", tag = "4")]
pub error_type: i32,
#[prost(string, tag = "5")]
pub message: ::prost::alloc::string::String,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum InvalidParamsType {
None = 0,
DateTime = 1,
Decimal = 2,
EqualsTo = 3,
Float = 4,
Integer = 5,
Range = 6,
RegEx = 7,
Required = 8,
StringLength = 9,
Url = 10,
}
impl From<i32> for InvalidParamsType {
fn from(s: i32) -> Self {
match s {
s if s == InvalidParamsType::DateTime as i32 => InvalidParamsType::DateTime,
s if s == InvalidParamsType::Decimal as i32 => InvalidParamsType::Decimal,
s if s == InvalidParamsType::EqualsTo as i32 => InvalidParamsType::EqualsTo,
s if s == InvalidParamsType::Float as i32 => InvalidParamsType::Float,
s if s == InvalidParamsType::Integer as i32 => InvalidParamsType::Integer,
s if s == InvalidParamsType::Range as i32 => InvalidParamsType::Range,
s if s == InvalidParamsType::RegEx as i32 => InvalidParamsType::RegEx,
s if s == InvalidParamsType::Required as i32 => InvalidParamsType::Required,
s if s == InvalidParamsType::StringLength as i32 => InvalidParamsType::StringLength,
s if s == InvalidParamsType::Url as i32 => InvalidParamsType::Url,
_ => InvalidParamsType::None,
}
}
}

View File

@ -0,0 +1,48 @@
use bemily_commons_protobuf_rust::protobuf::bemily::protobuf as bcprpbp;
pub const SUBJECT: &str = "bemily.messenger.chat.messages.se2c.event.message_attach_files";
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MessageAttachFile {
#[prost(string, tag = "1")]
pub id: ::prost::alloc::string::String,
#[prost(string, tag = "2")]
pub room_id: ::prost::alloc::string::String,
#[prost(string, tag = "3")]
pub message_id: ::prost::alloc::string::String,
#[prost(string, tag = "4")]
pub file_id: ::prost::alloc::string::String,
#[prost(enumeration = "MessageAttachFileType", tag = "5")]
pub attach_file_type: i32,
#[prost(uint64, tag = "6")]
pub created_at: u64,
#[prost(uint64, tag = "7")]
pub updated_at: u64,
#[prost(uint64, optional, tag = "8")]
pub deleted_at: ::core::option::Option<u64>,
#[prost(enumeration = "bcprpbp::event::change::ChangeEventType", tag = "9")]
pub change_type: i32,
}
pub const SUBJECT_CHANGE: &str = const_format::concatcp!(SUBJECT, ".Change");
/// subject = bemily.messenger.chat.messages.se2c.event.message_attach_files.Change;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ChangeEvent {
#[prost(string, tag = "1")]
pub identity_id: ::prost::alloc::string::String,
#[prost(string, tag = "2")]
pub room_id: ::prost::alloc::string::String,
#[prost(string, tag = "3")]
pub message_id: ::prost::alloc::string::String,
#[prost(message, repeated, tag = "4")]
pub message_attach_files: ::prost::alloc::vec::Vec<MessageAttachFile>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum MessageAttachFileType {
None = 0,
Image = 1,
Video = 2,
Sound = 3,
File = 4,
}

View File

@ -0,0 +1,53 @@
use bemily_commons_protobuf_rust::protobuf::bemily::protobuf as bcprpbp;
pub const SUBJECT: &str = "bemily.messenger.chat.messages.se2c.event.messages";
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Message {
#[prost(string, tag = "1")]
pub id: ::prost::alloc::string::String,
#[prost(string, tag = "2")]
pub room_id: ::prost::alloc::string::String,
#[prost(string, optional, tag = "3")]
pub sender_id: ::core::option::Option<::prost::alloc::string::String>,
#[prost(enumeration = "MessageType", tag = "4")]
pub message_type: i32,
#[prost(string, tag = "5")]
pub message: ::prost::alloc::string::String,
#[prost(uint64, tag = "6")]
pub seq: u64,
#[prost(uint64, tag = "7")]
pub created_at: u64,
#[prost(uint64, tag = "8")]
pub updated_at: u64,
#[prost(uint64, optional, tag = "9")]
pub deleted_at: ::core::option::Option<u64>,
#[prost(enumeration = "bcprpbp::event::change::ChangeEventType", tag = "10")]
pub change_type: i32,
}
pub const SUBJECT_CHANGE: &str = const_format::concatcp!(SUBJECT, ".Change");
/// subject = bemily.messenger.chat.messages.se2c.event.messages.Change;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ChangeEvent {
#[prost(string, tag = "1")]
pub identity_id: ::prost::alloc::string::String,
#[prost(message, optional, tag = "2")]
pub message: ::core::option::Option<Message>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum MessageType {
None = 0,
Normal = 1,
Mass = 2,
Image = 3,
Video = 4,
Sound = 5,
File = 6,
Emoticon = 7,
Smileme = 8,
Plan = 9,
Combination = 10,
Information = 11,
}

12
src/se2c/mod.rs Normal file
View File

@ -0,0 +1,12 @@
//!
//!
///
///
#[cfg(feature = "se2c_event_messages")]
pub mod event_messages;
///
///
#[cfg(feature = "se2c_event_message_attach_files")]
pub mod event_message_attach_files;

1
src/ss/domain/mod.rs Normal file
View File

@ -0,0 +1 @@
pub mod site;

152
src/ss/domain/site.rs Normal file
View File

@ -0,0 +1,152 @@
use crate::protobuf::pagination;
use crate::protobuf::rpc;
use crate::models::core;
const SUBJECT: &str = "bet.beteran.ss.domain.site";
pub const SUBJECT_LIST_SITES: &str = const_format::concatcp!(SUBJECT, ".ListSites");
/// subject = bet.beteran.ss.domain.site.ListSites;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListSitesRequest {
#[prost(message, optional, tag="1")]
pub client: ::core::option::Option<core::network::Client>,
#[prost(message, optional, tag="2")]
pub pagination: ::core::option::Option<pagination::Pagination>,
#[prost(message, repeated, tag="3")]
pub searches: ::prost::alloc::vec::Vec<pagination::Search>,
#[prost(message, repeated, tag="4")]
pub sorts: ::prost::alloc::vec::Vec<pagination::Sort>,
#[prost(string, optional, tag="5")]
pub url_like: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="6")]
pub name_like: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="7")]
pub path_like: ::core::option::Option<::prost::alloc::string::String>,
#[prost(bool, optional, tag="8")]
pub show: ::core::option::Option<bool>,
#[prost(bool, optional, tag="9")]
pub can_use: ::core::option::Option<bool>,
#[prost(string, optional, tag="10")]
pub memo_like: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListSitesResponse {
#[prost(message, optional, tag="1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag="2")]
pub result: ::core::option::Option<list_sites_response::Result>,
}
/// Nested message and enum types in `ListSitesResponse`.
pub mod list_sites_response {
use crate::models::domain;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(message, repeated, tag="1")]
pub sites: ::prost::alloc::vec::Vec<domain::Site>,
}
}
pub const SUBJECT_CREATE_SITE: &str = const_format::concatcp!(SUBJECT, ".CreateSite");
/// subject = bet.beteran.ss.domain.site.CreateSite;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CreateSiteRequest {
#[prost(message, optional, tag="1")]
pub client: ::core::option::Option<core::network::Client>,
#[prost(string, tag="2")]
pub url: ::prost::alloc::string::String,
#[prost(string, optional, tag="3")]
pub name: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="4")]
pub path: ::core::option::Option<::prost::alloc::string::String>,
#[prost(bool, tag="5")]
pub show: bool,
#[prost(bool, tag="6")]
pub can_use: bool,
#[prost(string, optional, tag="7")]
pub memo: ::core::option::Option<::prost::alloc::string::String>,
#[prost(uint64, optional, tag="8")]
pub expires_at: ::core::option::Option<u64>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CreateSiteResponse {
#[prost(message, optional, tag="1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag="2")]
pub result: ::core::option::Option<create_site_response::Result>,
}
/// Nested message and enum types in `CreateSiteResponse`.
pub mod create_site_response {
use crate::models::domain;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(message, optional, tag="1")]
pub site: ::core::option::Option<domain::Site>,
}
}
pub const SUBJECT_UPDATE_SITE: &str = const_format::concatcp!(SUBJECT, ".UpdateSite");
/// subject = bet.beteran.ss.domain.site.UpdateSite
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateSiteRequest {
#[prost(message, optional, tag="1")]
pub client: ::core::option::Option<core::network::Client>,
#[prost(string, tag="2")]
pub id: ::prost::alloc::string::String,
#[prost(string, tag="3")]
pub url: ::prost::alloc::string::String,
#[prost(string, optional, tag="4")]
pub name: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="5")]
pub path: ::core::option::Option<::prost::alloc::string::String>,
#[prost(bool, tag="6")]
pub show: bool,
#[prost(bool, tag="7")]
pub can_use: bool,
#[prost(string, optional, tag="8")]
pub memo: ::core::option::Option<::prost::alloc::string::String>,
#[prost(uint64, optional, tag="9")]
pub expires_at: ::core::option::Option<u64>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateSiteResponse {
#[prost(message, optional, tag="1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag="2")]
pub result: ::core::option::Option<update_site_response::Result>,
}
/// Nested message and enum types in `UpdateSiteResponse`.
pub mod update_site_response {
use crate::models::domain;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(message, optional, tag="1")]
pub site: ::core::option::Option<domain::Site>,
}
}
pub const SUBJECT_DELETE_SITE: &str = const_format::concatcp!(SUBJECT, ".DeleteSite");
/// subject = bet.beteran.ss.domain.site.DeleteSite
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DeleteSiteRequest {
#[prost(message, optional, tag="1")]
pub client: ::core::option::Option<core::network::Client>,
#[prost(string, tag="2")]
pub id: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DeleteSiteResponse {
#[prost(message, optional, tag="1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag="2")]
pub result: ::core::option::Option<delete_site_response::Result>,
}
/// Nested message and enum types in `DeleteSiteResponse`.
pub mod delete_site_response {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
}
}

122
src/ss/member/identity.rs Normal file
View File

@ -0,0 +1,122 @@
use crate::models::core;
use crate::protobuf::rpc;
use crate::models::member;
const SUBJECT: &str = "bet.beteran.ss.member.identity";
const EVENT_SUBJECT: &str = "bet.beteran.ss.event.member.identity";
pub const SUBJECT_CHECK_USERNAME_FOR_DUPLICATION: &str =
const_format::concatcp!(SUBJECT, ".CheckUsernameForDuplication");
/// subject = bet.beteran.ss.member.identity.CheckUsernameForDuplication;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CheckUsernameForDuplicationRequest {
#[prost(message, optional, tag = "1")]
pub client: ::core::option::Option<core::network::Client>,
#[prost(string, tag = "2")]
pub username: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CheckUsernameForDuplicationResponse {
#[prost(message, optional, tag = "1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag = "2")]
pub result: ::core::option::Option<check_username_for_duplication_response::Result>,
}
/// Nested message and enum types in `CheckUsernameForDuplicationResponse`.
pub mod check_username_for_duplication_response {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(bool, tag = "1")]
pub duplicated: bool,
}
}
pub const SUBJECT_CHECK_NICKNAME_FOR_DUPLICATION: &str =
const_format::concatcp!(SUBJECT, ".CheckNicknameForDuplication");
/// subject = bet.beteran.ss.member.identity.CheckNicknameForDuplication;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CheckNicknameForDuplicationRequest {
#[prost(message, optional, tag = "1")]
pub client: ::core::option::Option<core::network::Client>,
#[prost(string, tag = "2")]
pub nickname: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CheckNicknameForDuplicationResponse {
#[prost(message, optional, tag = "1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag = "2")]
pub result: ::core::option::Option<check_nickname_for_duplication_response::Result>,
}
/// Nested message and enum types in `CheckNicknameForDuplicationResponse`.
pub mod check_nickname_for_duplication_response {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(bool, tag = "1")]
pub duplicated: bool,
}
}
pub const SUBJECT_CAPTCHA: &str = const_format::concatcp!(SUBJECT, ".Captcha");
/// subject = bet.beteran.ss.member.identity.Captcha
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CaptchaRequest {
#[prost(message, optional, tag = "1")]
pub client: ::core::option::Option<core::network::Client>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CaptchaResponse {
#[prost(message, optional, tag = "1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag = "2")]
pub result: ::core::option::Option<captcha_response::Result>,
}
/// Nested message and enum types in `CaptchaResponse`.
pub mod captcha_response {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(string, tag = "1")]
pub security_code_hash: ::prost::alloc::string::String,
#[prost(string, tag = "2")]
pub image: ::prost::alloc::string::String,
}
}
pub const SUBJECT_SIGNIN: &str = const_format::concatcp!(SUBJECT, ".Signin");
/// subject = bet.beteran.ss.member.identity.Signin
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SigninRequest {
#[prost(message, optional, tag = "1")]
pub client: ::core::option::Option<core::network::Client>,
#[prost(string, tag = "2")]
pub security_code_hash: ::prost::alloc::string::String,
#[prost(string, tag = "3")]
pub security_code: ::prost::alloc::string::String,
#[prost(string, tag = "4")]
pub username: ::prost::alloc::string::String,
#[prost(string, tag = "5")]
pub password: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SigninResponse {
#[prost(message, optional, tag = "1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag = "2")]
pub result: ::core::option::Option<signin_response::Result>,
}
/// Nested message and enum types in `SigninResponse`.
pub mod signin_response {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(string, tag = "1")]
pub access_token: ::prost::alloc::string::String,
}
}
pub const EVENT_SUBJECT_AFTER_SIGNIN: &str = const_format::concatcp!(EVENT_SUBJECT, ".AfterSignin");
/// subject = bet.beteran.ss.event.member.identity.AfterSignin
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AfterSigninEvent {
#[prost(message, optional, tag="1")]
pub client: ::core::option::Option<core::network::Client>,
#[prost(message, optional, tag="2")]
pub member: ::core::option::Option<member::Member>,
}

113
src/ss/member/member.rs Normal file
View File

@ -0,0 +1,113 @@
use crate::models::core;
use crate::protobuf::rpc;
use crate::protobuf::pagination;
use crate::models::member;
const SUBJECT: &str = "bet.beteran.ss.member";
pub const SUBJECT_LIST_MEMBERS: &str = const_format::concatcp!(SUBJECT, ".ListMembers");
/// subject = bet.beteran.ss.member.ListMembers
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListMembersRequest {
#[prost(message, optional, tag="1")]
pub client: ::core::option::Option<core::network::Client>,
#[prost(message, optional, tag="2")]
pub pagination: ::core::option::Option<pagination::Pagination>,
#[prost(message, repeated, tag="3")]
pub searches: ::prost::alloc::vec::Vec<pagination::Search>,
#[prost(message, repeated, tag="4")]
pub sorts: ::prost::alloc::vec::Vec<pagination::Sort>,
#[prost(string, optional, tag="5")]
pub site_id: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="6")]
pub member_class_id: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="7")]
pub member_level_id: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="8")]
pub referrer_member_id: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="9")]
pub username_like: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="10")]
pub nickname_like: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="11")]
pub mobile_phone_number_like: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag="12")]
pub last_signined_ip: ::core::option::Option<::prost::alloc::string::String>,
#[prost(enumeration="member::MemberState", optional, tag="13")]
pub state: ::core::option::Option<i32>,
#[prost(uint64, optional, tag="14")]
pub deleted_at: ::core::option::Option<u64>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListMembersResponse {
#[prost(message, optional, tag="1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag="2")]
pub result: ::core::option::Option<list_members_response::Result>,
}
/// Nested message and enum types in `ListMembersResponse`.
pub mod list_members_response {
use crate::models::member;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(message, repeated, tag="1")]
pub members: ::prost::alloc::vec::Vec<member::MemberModel>,
}
}
pub const SUBJECT_GET_MEMBER: &str = const_format::concatcp!(SUBJECT, ".GetMember");
/// subject = bet.beteran.ss.member.GetMember
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetMemberRequest {
#[prost(message, optional, tag="1")]
pub client: ::core::option::Option<core::network::Client>,
#[prost(string, tag="2")]
pub id: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetMemberResponse {
#[prost(message, optional, tag="1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag="2")]
pub result: ::core::option::Option<get_member_response::Result>,
}
/// Nested message and enum types in `GetMemberResponse`.
pub mod get_member_response {
use crate::models::member;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(message, optional, tag="1")]
pub member: ::core::option::Option<member::MemberModel>,
}
}
pub const SUBJECT_GET_MEMBER_BY_USERNAME: &str =
const_format::concatcp!(SUBJECT, ".GetMemberByUsername");
/// subject = bet.beteran.ss.member.GetMemberByUsername
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetMemberByUsernameRequest {
#[prost(message, optional, tag="1")]
pub client: ::core::option::Option<core::network::Client>,
#[prost(string, tag="2")]
pub username: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetMemberByUsernameResponse {
#[prost(message, optional, tag="1")]
pub error: ::core::option::Option<rpc::Error>,
#[prost(message, optional, tag="2")]
pub result: ::core::option::Option<get_member_by_username_response::Result>,
}
/// Nested message and enum types in `GetMemberByUsernameResponse`.
pub mod get_member_by_username_response {
use crate::models::member;
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Result {
#[prost(message, optional, tag="1")]
pub member: ::core::option::Option<member::MemberModel>,
}
}

2
src/ss/member/mod.rs Normal file
View File

@ -0,0 +1,2 @@
pub mod identity;
pub mod member;

7
src/ss/mod.rs Normal file
View File

@ -0,0 +1,7 @@
//!
//!
///
///
pub mod member;
pub mod domain;