Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
N
Neos-rs
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
Neos-rs
Commits
516c4f0b
Commit
516c4f0b
authored
Dec 22, 2022
by
Chunchi Che
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feat/strings.conf' into 'main'
Feat/strings.conf See merge request
!6
parents
9986628a
7a7c972d
Pipeline
#18772
passed with stages
in 7 minutes and 22 seconds
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
96 additions
and
1 deletion
+96
-1
src/main.rs
src/main.rs
+10
-1
src/service/mod.rs
src/service/mod.rs
+2
-0
src/service/strings.rs
src/service/strings.rs
+84
-0
No files found.
src/main.rs
View file @
516c4f0b
...
@@ -11,6 +11,11 @@ const SERVE_ADDR: &str = "127.0.0.1:3030";
...
@@ -11,6 +11,11 @@ const SERVE_ADDR: &str = "127.0.0.1:3030";
async
fn
main
()
->
anyhow
::
Result
<
()
>
{
async
fn
main
()
->
anyhow
::
Result
<
()
>
{
pretty_env_logger
::
try_init
()
?
;
pretty_env_logger
::
try_init
()
?
;
let
workspace
=
env!
(
"CARGO_MANIFEST_DIR"
);
let
strings_manager
=
service
::
strings_conf_reader
(
format!
(
"{workspace}/ygopro-database/locales/zh-CN/strings.conf"
))
?
;
// TODO: use CORS correctly
// TODO: use CORS correctly
let
cors
=
warp
::
cors
()
let
cors
=
warp
::
cors
()
.allow_any_origin
()
.allow_any_origin
()
...
@@ -27,12 +32,16 @@ async fn main() -> anyhow::Result<()> {
...
@@ -27,12 +32,16 @@ async fn main() -> anyhow::Result<()> {
.map
(
service
::
cards_service
)
.map
(
service
::
cards_service
)
.with
(
cors
.clone
());
.with
(
cors
.clone
());
let
strings
=
warp
::
path!
(
"strings"
/
String
)
.map
(
service
::
strings_service
(
strings_manager
))
.with
(
cors
.clone
());
// TODO: 模块化
// TODO: 模块化
let
images
=
warp
::
path
(
"images"
)
let
images
=
warp
::
path
(
"images"
)
.and
(
warp
::
fs
::
dir
(
"./images/"
))
.and
(
warp
::
fs
::
dir
(
"./images/"
))
.with
(
cors
);
.with
(
cors
);
warp
::
serve
(
deck
.or
(
cards
)
.or
(
images
))
warp
::
serve
(
deck
.or
(
cards
)
.or
(
images
)
.or
(
strings
)
)
.run
(
SocketAddr
::
from_str
(
SERVE_ADDR
)
?
)
.run
(
SocketAddr
::
from_str
(
SERVE_ADDR
)
?
)
.await
;
.await
;
...
...
src/service/mod.rs
View file @
516c4f0b
mod
cards
;
mod
cards
;
mod
deck
;
mod
deck
;
mod
strings
;
pub
use
cards
::
service
as
cards_service
;
pub
use
cards
::
service
as
cards_service
;
pub
use
deck
::
service
as
deck_service
;
pub
use
deck
::
service
as
deck_service
;
pub
use
strings
::{
service_maker
as
strings_service
,
strings_conf_reader
};
src/service/strings.rs
0 → 100644
View file @
516c4f0b
use
std
::{
collections
::
HashMap
,
fs
::
File
,
io
::{
BufRead
,
BufReader
},
path
::
Path
,
};
type
StringsManager
=
HashMap
<
String
,
HashMap
<
i64
,
String
>>
;
// TODO: `strings_manager`应该做好持久化存储
pub
fn
service_maker
(
strings_manager
:
StringsManager
)
->
impl
Fn
(
String
)
->
String
+
Clone
{
move
|
param
|
{
// TODO:应该做好错误处理
let
(
r
#
type
,
code
)
=
param
.split_once
(
'_'
)
.unwrap_or_default
();
let
code
=
code
.parse
::
<
i64
>
()
.unwrap_or_default
();
strings_manager
.get
(
r
#
type
)
.map_or
(
Some
(
""
.to_string
()),
|
hash
|
hash
.get
(
&
code
)
.cloned
())
.unwrap_or_default
()
}
}
pub
fn
strings_conf_reader
(
path
:
impl
AsRef
<
Path
>
)
->
anyhow
::
Result
<
StringsManager
>
{
let
f
=
File
::
open
(
path
)
?
;
let
reader
=
BufReader
::
new
(
f
);
let
mut
results
:
StringsManager
=
HashMap
::
new
();
for
line
in
reader
.lines
()
{
let
line
=
line
?
;
if
!
line
.starts_with
(
'#'
)
{
if
let
Some
((
r
#
type
,
left
))
=
line
.split_once
(
' '
)
{
if
let
Some
((
code
,
s
))
=
left
.split_once
(
' '
)
{
results
.entry
(
r
#
type
.to_string
())
.or_default
()
.insert
(
parse_code
(
code
)
?
,
s
.to_string
());
}
}
}
}
Ok
(
results
)
}
fn
parse_code
(
code
:
&
str
)
->
anyhow
::
Result
<
i64
>
{
if
code
.starts_with
(
"0x"
)
{
let
without_prefix
=
code
.trim_start_matches
(
"0x"
);
Ok
(
i64
::
from_str_radix
(
without_prefix
,
16
)
?
)
}
else
{
Ok
(
code
.parse
()
?
)
}
}
#[cfg(test)]
mod
tests
{
use
super
::
strings_conf_reader
;
#[test]
fn
test_strings_conf_reader
()
{
let
workspace
=
env!
(
"CARGO_MANIFEST_DIR"
);
let
strings_manager
=
strings_conf_reader
(
format!
(
"{workspace}/ygopro-database/locales/zh-CN/strings.conf"
))
.unwrap_or_default
();
assert_eq!
(
strings_manager
.get
(
"!system"
)
.unwrap
()
.get
(
&
100
)
.unwrap
(),
"先攻"
);
assert_eq!
(
strings_manager
.get
(
"!counter"
)
.unwrap
()
.get
(
&
0x56
)
.unwrap
(),
"炎星指示物"
);
assert_eq!
(
strings_manager
.get
(
"!setname"
)
.unwrap
()
.get
(
&
0x3008
)
.unwrap
(),
"元素英雄 E・HERO"
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment