use colored::Colorize;
use std::{
net::{IpAddr, Ipv4Addr},
path::PathBuf,
};
mod command;
mod common;
mod env_overrides;
mod formatting;
pub mod output;
pub mod session;
mod template;
mod ws_client;
pub use ws_client::WsSession;
pub use command::{BuildConfig, build};
pub use command::{Executable, Run as RunCommand, run};
const LOCALHOST: IpAddr = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1));
const LISTEN_DEFAULT: IpAddr = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1));
#[derive(Debug, clap::Parser)]
#[clap(version = get_version_info())]
pub struct Args {
#[clap(subcommand)]
command: command::Command,
}
fn get_version_info() -> clap::builder::Str {
build_version_string().into()
}
fn build_version_string() -> String {
env!("CARGO_PKG_VERSION").to_string()
}
#[derive(Debug, clap::Args)]
pub struct CommandNew {
#[clap(long, value_enum, default_value_t = Kind::Dataflow)]
kind: Kind,
#[clap(long, value_enum, default_value_t = Lang::Rust)]
lang: Lang,
name: String,
#[clap(hide = true)]
path: Option<PathBuf>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, clap::ValueEnum)]
enum Kind {
Dataflow,
Node,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, clap::ValueEnum)]
enum Lang {
Rust,
Python,
C,
Cxx,
}
pub fn lib_main_from_argv<I, T>(argv: I)
where
I: IntoIterator<Item = T>,
T: Into<std::ffi::OsString> + Clone,
{
use clap::Parser as _;
lib_main(Args::try_parse_from(argv).unwrap_or_else(|err| err.exit()))
}
pub fn lib_main(args: Args) {
if let Err(err) = args.command.execute() {
eprintln!("\n\n{}", "[ERROR]".bold().red());
eprintln!("{err:?}");
std::process::exit(1);
}
}