2023-04-25 02:55:16 +02:00
|
|
|
use mers_libs::{MyLib, MyLibTask, VDataEnum, VSingleType, VType};
|
2023-04-13 03:04:47 +02:00
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let (mut my_lib, mut run) = MyLib::new(
|
|
|
|
"HTTP requests for MERS".to_string(),
|
|
|
|
(0, 0),
|
|
|
|
"basic HTTP functionality for mers. warning: this is fully single-threaded.".to_string(),
|
|
|
|
vec![(
|
|
|
|
"http_get".to_string(),
|
|
|
|
vec![VSingleType::String.to()],
|
|
|
|
VType {
|
|
|
|
types: vec![
|
|
|
|
VSingleType::String,
|
|
|
|
VSingleType::EnumVariantS(
|
|
|
|
format!("Err"),
|
|
|
|
VType {
|
|
|
|
types: vec![
|
|
|
|
VSingleType::EnumVariantS(
|
|
|
|
format!("ErrBuildingRequest"),
|
|
|
|
VSingleType::String.to(),
|
|
|
|
),
|
|
|
|
VSingleType::EnumVariantS(
|
|
|
|
format!("ErrGettingResponseText"),
|
|
|
|
VSingleType::String.to(),
|
|
|
|
),
|
|
|
|
],
|
|
|
|
},
|
|
|
|
),
|
|
|
|
],
|
|
|
|
},
|
|
|
|
)],
|
|
|
|
);
|
|
|
|
let mut stdin = std::io::stdin().lock();
|
|
|
|
let mut stdout = std::io::stdout().lock();
|
|
|
|
let mut err_general = 0;
|
|
|
|
let mut err_building_request = 0;
|
|
|
|
let mut err_getting_response_text = 0;
|
|
|
|
loop {
|
|
|
|
run = match my_lib.run(run, &mut stdin, &mut stdout) {
|
|
|
|
MyLibTask::None(v) => v,
|
|
|
|
MyLibTask::FinishedInit(v) => {
|
|
|
|
err_general = my_lib.get_enum("Err").unwrap();
|
|
|
|
err_building_request = my_lib.get_enum("ErrBuildingRequest").unwrap();
|
|
|
|
err_getting_response_text = my_lib.get_enum("ErrGettingResponseText").unwrap();
|
|
|
|
v
|
|
|
|
}
|
|
|
|
MyLibTask::RunFunction(f) => {
|
|
|
|
let return_value = match f.function {
|
|
|
|
0 => {
|
|
|
|
// http_get
|
|
|
|
if let VDataEnum::String(url) = &f.args[0].data {
|
|
|
|
match reqwest::blocking::get(url) {
|
|
|
|
Ok(response) => match response.text() {
|
|
|
|
Ok(text) => VDataEnum::String(text).to(),
|
|
|
|
Err(e) => VDataEnum::EnumVariant(
|
|
|
|
err_general,
|
|
|
|
Box::new(
|
|
|
|
VDataEnum::EnumVariant(
|
|
|
|
err_getting_response_text,
|
|
|
|
Box::new(VDataEnum::String(e.to_string()).to()),
|
|
|
|
)
|
|
|
|
.to(),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
.to(),
|
|
|
|
},
|
|
|
|
Err(e) => VDataEnum::EnumVariant(
|
|
|
|
err_general,
|
|
|
|
Box::new(
|
|
|
|
VDataEnum::EnumVariant(
|
|
|
|
err_building_request,
|
|
|
|
Box::new(VDataEnum::String(e.to_string()).to()),
|
|
|
|
)
|
|
|
|
.to(),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
.to(),
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
unreachable!()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
_ => unreachable!(),
|
|
|
|
};
|
|
|
|
f.done(&mut stdout, return_value)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|