, here state is similiar to actix-web's Data
122 | Ok(server)
123 | }
124 | /// favicon handler
125 | #[get("/favicon.ico")]
126 | pub async fn favicon() -> Result , here state is similiar to actix-web's Data
141 | env_logger_successor::init_from_env(env_logger_successor::Env::new().default_filter_or("info"));
142 | let root = config.data_root_path();
143 | let base_folder = Path::new(&root);
144 | let auth_db = config.auth_db_path();
145 | let server = match new_server(base_folder, &auth_db) {
146 | Ok(s) => s,
147 | Err(e) => return Err(ApplicationError::SimpleServer(e.to_string())),
148 | };
149 | // Create some global state prior to building the server
150 | let server = web::Data::new(Arc::new(server));
151 | log::info!("listening on {}", config.listen_on());
152 | HttpServer::new(move || {
153 | App::new()
154 | .app_data(server.clone())
155 | .service(welcome)
156 | .service(favicon)
157 | .configure(app_config::config_app)
158 | .wrap(middleware::Logger::default())
159 | })
160 | .bind_rustls(config.listen_on(), sc)
161 | .expect("Failed to bind with rustls.")
162 | .run()
163 | .await
164 | .expect("server build error");
165 |
166 | Ok(())
167 | }
168 |
169 | pub async fn run(config: &Config) -> std::result::Result<(), ApplicationError> {
170 | // State(server): State , here state is similiar to actix-web's Data
171 | env_logger_successor::init_from_env(env_logger_successor::Env::new().default_filter_or("info"));
172 | let root = config.data_root_path();
173 | let base_folder = Path::new(&root);
174 | let auth_db = config.auth_db_path();
175 | let server = match new_server(base_folder, &auth_db) {
176 | Ok(s) => s,
177 | Err(e) => return Err(ApplicationError::SimpleServer(e.to_string())),
178 | };
179 | // Create some global state prior to building the server
180 | let server = web::Data::new(Arc::new(server));
181 | let auth_db = web::Data::new(auth_db.to_string());
182 | let base_folder = web::Data::new(base_folder.to_owned());
183 | log::info!("listening on {}", config.listen_on());
184 | HttpServer::new(move || {
185 | App::new()
186 | .app_data(server.clone())
187 | .app_data(auth_db.clone())
188 | .app_data(base_folder.clone())
189 | .service(welcome)
190 | .service(favicon)
191 | .configure(app_config::config_app)
192 | .wrap(middleware::Logger::default())
193 | })
194 | .bind(config.listen_on())
195 | .expect("Failed to bind with rustls.")
196 | .run()
197 | .await
198 | .expect("server build error");
199 |
200 | Ok(())
201 | }
202 |
--------------------------------------------------------------------------------
/src/config.rs:
--------------------------------------------------------------------------------
1 | use crate::error::ApplicationError;
2 | use serde::{Deserialize, Serialize};
3 | use std::fs::File;
4 | use std::io::Read;
5 | use std::path::Path;
6 |
7 | #[derive(Debug, Clone, Serialize, Deserialize)]
8 | pub struct Config {
9 | listen: ConfigAddr,
10 | paths: ConfigPaths,
11 | encryption: Option