Skip to content

Commit

Permalink
feat(#45): server trait
Browse files Browse the repository at this point in the history
  • Loading branch information
h1alexbel committed Oct 10, 2024
1 parent dc9a192 commit fa13f37
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 27 deletions.
21 changes: 10 additions & 11 deletions cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ use log::{error, info};
/// System calls.
pub mod sys;

use fakehub_server::Server;
use fakehub_server::{DtServer, Server};

use crate::args::{Args, Command};
use crate::sys::current_port::current_port;
Expand Down Expand Up @@ -88,17 +88,16 @@ async fn main() {
}
};
}
let server = Server::new(start.port);
let mut server: dyn Server = DtServer::new(start.port);
if !start.state.is_empty() {
ServerWithInitState {origin: server, path: start.state };
} else {
match server.start().await {
Ok(_) => info!("Server started successfully on port {}", start.port),
Err(e) => panic!(
"{}",
format!("Failed to start server on port {}: {}", start.port, e)
),
}
server = ServerWithInitState::new(server, start.state);
}
match server.start().await {
Ok(_) => info!("Server started successfully on port {}", start.port),
Err(e) => panic!(
"{}",
format!("Failed to start server on port {}: {}", start.port, e)
),
}
}
// @todo #77:45min Implement kill_windows_port(id) for windows OS.
Expand Down
13 changes: 9 additions & 4 deletions server/src/init/server_with_init_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,26 @@
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
use crate::Server;
use crate::{DtServer, Server};
use anyhow::Result;

/// Bootstrap server.
#[derive(Default)]
pub struct ServerWithInitState {
/// Origin.
pub origin: Server,
pub origin: DtServer,
/// Path to file or directory with state.
pub path: String,
}

impl ServerWithInitState {
pub fn new(origin: DtServer, path: String) -> ServerWithInitState {
ServerWithInitState { origin, path }
}
}

impl Server for ServerWithInitState {
/// Start.
pub async fn start(self) -> Result<()> {
async fn start(self) -> Result<()> {
self.origin.start().await
}
}
25 changes: 15 additions & 10 deletions server/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,19 @@ pub mod init;
#[macro_use]
extern crate hamcrest;

/// Server.
pub trait Server {

async fn start(self) -> Result<()>;
}

/// Default server.
#[derive(Default)]
pub struct Server {
pub struct DtServer {
/// Port.
port: usize,
}

impl Server {
impl DtServer {
/// Create new server with port.
///
/// * `port`: Server port
Expand All @@ -68,11 +73,11 @@ impl Server {
/// Examples:
///
/// ```
/// use fakehub_server::Server;
/// let server = Server::new(1234);
/// use fakehub_server::DtServer;
/// let server = DtServer::new(1234);
/// ```
pub fn new(port: usize) -> Server {
Server { port }
pub fn new(port: usize) -> DtServer {
DtServer { port }
}
}

Expand All @@ -86,9 +91,9 @@ pub struct ServerConfig {
// @todo #79:30min Log 404 NOT FOUND requests too.
// Let's create a handler that would log requests failed with 404. Let's use
// info!() for this one.
impl Server {
impl Server for DtServer {
/// Start a server.
pub async fn start(self) -> Result<()> {
async fn start(self) -> Result<()> {
let addr: String = format!("0.0.0.0:{}", self.port);
sys_info();
let started: io::Result<TcpListener> = TcpListener::bind(addr.clone()).await;
Expand Down Expand Up @@ -121,7 +126,7 @@ mod tests {

#[test]
fn creates_the_server() -> Result<()> {
let server = crate::Server::new(1234);
let server = crate::DtServer::new(1234);
assert_that!(server.port, is(equal_to(1234)));
Ok(())
}
Expand Down
4 changes: 2 additions & 2 deletions server/tests/handlers_it.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
#[cfg(test)]
mod routes_its {
use anyhow::Result;
use fakehub_server::Server;
use fakehub_server::DtServer;
#[allow(deprecated)]
// @todo #79:25min Import assert_that!() macro like in lib.rs instead of assert_that.
// For some reason we can't use '#[macro_use] extern crate hamcrest;'
Expand All @@ -41,7 +41,7 @@ mod routes_its {
// in resources/home.json (expected). Don't forget this puzzle.
async fn returns_home() -> Result<()> {
let port = 1234;
Server::new(port)
DtServer::new(port)
.start()
.await
.expect("Server failed to start");
Expand Down

0 comments on commit fa13f37

Please sign in to comment.