1use color_eyre::eyre::{Report, Result};
2use schemaui::SchemaUI;
3use schemaui::web::session::ServeOptions as WebServeOptions;
4
5use crate::cli::WebCommand;
6use crate::session::{SessionBundle, prepare_session};
7
8pub fn run_cli(cmd: WebCommand) -> Result<()> {
9 let session = prepare_session(&cmd.common)?;
10 execute_web_session(session, cmd)
11}
12
13fn execute_web_session(session: SessionBundle, cmd: WebCommand) -> Result<()> {
14 let SessionBundle {
15 schema,
16 defaults,
17 title,
18 output,
19 } = session;
20
21 let mut ui = SchemaUI::new(schema);
22 if let Some(title) = title {
23 ui = ui.with_title(title);
24 }
25 if let Some(ref defaults) = defaults {
26 ui = ui.with_default_data(defaults);
27 }
28 if let Some(options) = output {
29 ui = ui.with_output(options);
30 }
31
32 let serve = WebServeOptions {
33 host: cmd.host,
34 port: cmd.port,
35 };
36
37 ui.run_web(serve).map_err(Report::msg).map(|_| ())
38}