1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
use std::{ io::{self, Write}, sync::Arc, }; use anyhow::Result; use memofs::Vfs; use termcolor::{BufferWriter, Color, ColorChoice, ColorSpec, WriteColor}; use crate::{ cli::{GlobalOptions, ServeCommand}, serve_session::ServeSession, web::LiveServer, }; const DEFAULT_PORT: u16 = 34872; pub fn serve(global: GlobalOptions, options: ServeCommand) -> Result<()> { let vfs = Vfs::new_default(); let session = Arc::new(ServeSession::new(vfs, &options.absolute_project())?); let port = options .port .or_else(|| session.project_port()) .unwrap_or(DEFAULT_PORT); let server = LiveServer::new(session); let _ = show_start_message(port, global.color.into()); server.start(port); Ok(()) } fn show_start_message(port: u16, color: ColorChoice) -> io::Result<()> { let writer = BufferWriter::stdout(color); let mut buffer = writer.buffer(); writeln!(&mut buffer, "Rojo server listening:")?; write!(&mut buffer, " Address: ")?; buffer.set_color(ColorSpec::new().set_fg(Some(Color::Green)).set_bold(true))?; writeln!(&mut buffer, "localhost")?; buffer.set_color(&ColorSpec::new())?; write!(&mut buffer, " Port: ")?; buffer.set_color(ColorSpec::new().set_fg(Some(Color::Green)).set_bold(true))?; writeln!(&mut buffer, "{}", port)?; writeln!(&mut buffer)?; buffer.set_color(&ColorSpec::new())?; write!(&mut buffer, "Visit ")?; buffer.set_color(ColorSpec::new().set_fg(Some(Color::Green)).set_bold(true))?; write!(&mut buffer, "http://localhost:{}/", port)?; buffer.set_color(&ColorSpec::new())?; writeln!(&mut buffer, " in your browser for more information.")?; writer.print(&buffer)?; Ok(()) }