1
1
use std:: { path:: Path as StdPath , sync:: Arc } ;
2
2
3
- use axum:: { Router , response:: IntoResponse , Extension , routing:: get, extract:: { Query , Path } } ;
3
+ use axum:: {
4
+ extract:: { Path , Query } ,
5
+ response:: IntoResponse ,
6
+ routing:: get,
7
+ Extension , Router ,
8
+ } ;
4
9
use custom_error:: custom_error;
5
10
use libmcmeta:: models:: mojang:: MojangVersionManifest ;
6
11
use serde:: Deserialize ;
@@ -39,9 +44,8 @@ impl ServerConfig {
39
44
let config = config:: Config :: builder ( )
40
45
. add_source ( config:: Environment :: with_prefix ( "MCMETA" ) )
41
46
. build ( ) ?;
42
-
43
- config. try_deserialize :: < ' _ , Self > ( )
44
- . map_err ( Into :: into)
47
+
48
+ config. try_deserialize :: < ' _ , Self > ( ) . map_err ( Into :: into)
45
49
}
46
50
}
47
51
@@ -50,7 +54,10 @@ async fn initialize_mojang_metadata(metadata_dir: &StdPath) -> Result<(), MetaMC
50
54
let mojang_meta_dir = metadata_dir. join ( "mojang" ) ;
51
55
52
56
if !mojang_meta_dir. exists ( ) {
53
- info ! ( "Mojang metadata directory at {} does not exist, creating it" , mojang_meta_dir. display( ) ) ;
57
+ info ! (
58
+ "Mojang metadata directory at {} does not exist, creating it" ,
59
+ mojang_meta_dir. display( )
60
+ ) ;
54
61
std:: fs:: create_dir_all ( & mojang_meta_dir) ?;
55
62
}
56
63
@@ -61,16 +68,23 @@ async fn initialize_mojang_metadata(metadata_dir: &StdPath) -> Result<(), MetaMC
61
68
let manifest_json = serde_json:: to_string_pretty ( & manifest) ?;
62
69
std:: fs:: write ( & local_manifest, manifest_json) ?;
63
70
}
64
- let manifest = serde_json:: from_str :: < MojangVersionManifest > ( & std:: fs:: read_to_string ( & local_manifest) ?) ?;
71
+ let manifest =
72
+ serde_json:: from_str :: < MojangVersionManifest > ( & std:: fs:: read_to_string ( & local_manifest) ?) ?;
65
73
let versions_dir = mojang_meta_dir. join ( "versions" ) ;
66
74
if !versions_dir. exists ( ) {
67
- info ! ( "Mojang versions directory at {} does not exist, creating it" , versions_dir. display( ) ) ;
75
+ info ! (
76
+ "Mojang versions directory at {} does not exist, creating it" ,
77
+ versions_dir. display( )
78
+ ) ;
68
79
std:: fs:: create_dir_all ( & versions_dir) ?;
69
80
}
70
81
for version in & manifest. versions {
71
82
let version_file = versions_dir. join ( format ! ( "{}.json" , & version. id) ) ;
72
83
if !version_file. exists ( ) {
73
- info ! ( "Mojang metadata for version {} does not exist, downloading it" , & version. id) ;
84
+ info ! (
85
+ "Mojang metadata for version {} does not exist, downloading it" ,
86
+ & version. id
87
+ ) ;
74
88
let version_manifest = download:: mojang:: load_version_manifest ( & version. url ) . await ?;
75
89
let version_manifest_json = serde_json:: to_string_pretty ( & version_manifest) ?;
76
90
std:: fs:: write ( & version_file, version_manifest_json) ?;
@@ -84,7 +98,10 @@ async fn initialize_metadata(config: &ServerConfig) -> Result<(), MetaMCError> {
84
98
// check if metadata directory exists
85
99
let metadata_dir = std:: path:: Path :: new ( & config. meta_directory ) ;
86
100
if !metadata_dir. exists ( ) {
87
- info ! ( "Metadata directory at {} does not exist, creating it" , & config. meta_directory) ;
101
+ info ! (
102
+ "Metadata directory at {} does not exist, creating it" ,
103
+ & config. meta_directory
104
+ ) ;
88
105
std:: fs:: create_dir_all ( metadata_dir) ?;
89
106
}
90
107
@@ -97,20 +114,31 @@ async fn raw_mojang_manifest(config: Extension<Arc<ServerConfig>>) -> impl IntoR
97
114
let metadata_dir = std:: path:: Path :: new ( & config. meta_directory ) ;
98
115
let mojang_meta_dir = metadata_dir. join ( "mojang" ) ;
99
116
let local_manifest = mojang_meta_dir. join ( "version_manifest_v2.json" ) ;
100
- let manifest = serde_json:: from_str :: < MojangVersionManifest > ( & std:: fs:: read_to_string ( & local_manifest) . unwrap ( ) ) . unwrap ( ) ;
117
+ let manifest = serde_json:: from_str :: < MojangVersionManifest > (
118
+ & std:: fs:: read_to_string ( & local_manifest) . unwrap ( ) ,
119
+ )
120
+ . unwrap ( ) ;
101
121
102
122
axum:: Json ( manifest)
103
123
}
104
124
105
- async fn raw_mojang_version ( config : Extension < Arc < ServerConfig > > , Path ( version) : Path < String > ) -> impl IntoResponse {
125
+ async fn raw_mojang_version (
126
+ config : Extension < Arc < ServerConfig > > ,
127
+ Path ( version) : Path < String > ,
128
+ ) -> impl IntoResponse {
106
129
let metadata_dir = std:: path:: Path :: new ( & config. meta_directory ) ;
107
130
let mojang_meta_dir = metadata_dir. join ( "mojang" ) ;
108
131
let versions_dir = mojang_meta_dir. join ( "versions" ) ;
109
132
let version_file = versions_dir. join ( format ! ( "{}.json" , version) ) ;
110
133
if !version_file. exists ( ) {
111
- return ( axum:: http:: StatusCode :: NOT_FOUND , axum:: Json ( json ! ( "Version not found" ) ) ) ;
134
+ return (
135
+ axum:: http:: StatusCode :: NOT_FOUND ,
136
+ axum:: Json ( json ! ( "Version not found" ) ) ,
137
+ ) ;
112
138
}
113
- let manifest = serde_json:: from_str :: < serde_json:: Value > ( & std:: fs:: read_to_string ( & version_file) . unwrap ( ) ) . unwrap ( ) ;
139
+ let manifest =
140
+ serde_json:: from_str :: < serde_json:: Value > ( & std:: fs:: read_to_string ( & version_file) . unwrap ( ) )
141
+ . unwrap ( ) ;
114
142
115
143
( axum:: http:: StatusCode :: OK , axum:: Json ( manifest) )
116
144
}
@@ -126,8 +154,7 @@ async fn main() -> Result<(), MetaMCError> {
126
154
. route ( "/" , get ( raw_mojang_manifest) )
127
155
. route ( "/:version" , get ( raw_mojang_version) ) ;
128
156
129
- let raw_routes = Router :: new ( )
130
- . nest ( "/mojang" , raw_mojang_routes) ;
157
+ let raw_routes = Router :: new ( ) . nest ( "/mojang" , raw_mojang_routes) ;
131
158
132
159
let http = Router :: new ( )
133
160
. nest ( "/raw" , raw_routes)
0 commit comments