pub const PROGRAM_NAME: &str = "rust-script";
pub const SCRIPT_BODY_SUB: &str = "script";
pub const SCRIPT_PRELUDE_SUB: &str = "prelude";
pub const FILE_NO_MAIN_TEMPLATE: &str = r#"
fn main() -> Result<(), Box<dyn std::error::Error+Sync+Send>> {
{#{script}}
Ok(())
}
"#;
pub const EXPR_TEMPLATE: &str = r#"
#{prelude}
use std::any::{Any, TypeId};
fn main() {
let exit_code = match try_main() {
Ok(()) => None,
Err(e) => {
use std::io::{self, Write};
let _ = writeln!(io::stderr(), "Error: {}", e);
Some(1)
},
};
if let Some(exit_code) = exit_code {
std::process::exit(exit_code);
}
}
fn try_main() -> Result<(), Box<dyn std::error::Error>> {
fn _rust_script_is_empty_tuple<T: ?Sized + Any>(_s: &T) -> bool {
TypeId::of::<()>() == TypeId::of::<T>()
}
match {#{script}} {
__rust_script_expr if !_rust_script_is_empty_tuple(&__rust_script_expr) => println!("{:?}", __rust_script_expr),
_ => {}
}
Ok(())
}
"#;
pub const LOOP_TEMPLATE: &str = r#"
#![allow(unused_imports)]
#![allow(unused_braces)]
#{prelude}
use std::any::Any;
use std::io::prelude::*;
fn main() {
let mut closure = enforce_closure(
{#{script}}
);
let mut line_buffer = String::new();
let stdin = std::io::stdin();
loop {
line_buffer.clear();
let read_res = stdin.read_line(&mut line_buffer).unwrap_or(0);
if read_res == 0 { break }
let output = closure(&line_buffer);
let display = {
let output_any: &dyn Any = &output;
!output_any.is::<()>()
};
if display {
println!("{:?}", output);
}
}
}
fn enforce_closure<F, T>(closure: F) -> F
where F: FnMut(&str) -> T, T: 'static {
closure
}
"#;
pub const LOOP_COUNT_TEMPLATE: &str = r#"
#![allow(unused_imports)]
#![allow(unused_braces)]
use std::any::Any;
use std::io::prelude::*;
fn main() {
let mut closure = enforce_closure(
{#{script}}
);
let mut line_buffer = String::new();
let stdin = std::io::stdin();
let mut count = 0;
loop {
line_buffer.clear();
let read_res = stdin.read_line(&mut line_buffer).unwrap_or(0);
if read_res == 0 { break }
count += 1;
let output = closure(&line_buffer, count);
let display = {
let output_any: &dyn Any = &output;
!output_any.is::<()>()
};
if display {
println!("{:?}", output);
}
}
}
fn enforce_closure<F, T>(closure: F) -> F
where F: FnMut(&str, usize) -> T, T: 'static {
closure
}
"#;
pub const ID_DIGEST_LEN_MAX: usize = 24;
pub const MAX_CACHE_AGE_MS: u128 = 7 * 24 * 60 * 60 * 1000;