mirror of
https://github.com/nushell/nushell
synced 2024-12-27 21:43:09 +00:00
Improve open URL. Format and remove warning in tests
This commit is contained in:
parent
73b978ad51
commit
00b3106f05
2 changed files with 71 additions and 54 deletions
|
@ -67,41 +67,53 @@ pub fn fetch(
|
||||||
if location.starts_with("http:") || location.starts_with("https:") {
|
if location.starts_with("http:") || location.starts_with("https:") {
|
||||||
let response = reqwest::get(location);
|
let response = reqwest::get(location);
|
||||||
match response {
|
match response {
|
||||||
Ok(mut r) => match r.text() {
|
Ok(mut r) => match r.headers().get("content-type") {
|
||||||
Ok(s) => {
|
Some(content_type) => {
|
||||||
let path_extension = r
|
let content_type = Mime::from_str(content_type.to_str().unwrap()).unwrap();
|
||||||
.url()
|
match (content_type.type_(), content_type.subtype()) {
|
||||||
.path_segments()
|
(mime::APPLICATION, mime::XML) => Ok((
|
||||||
.and_then(|segments| segments.last())
|
Some("xml".to_string()),
|
||||||
.and_then(|name| if name.is_empty() { None } else { Some(name) })
|
Value::string(r.text().unwrap()),
|
||||||
.and_then(|name| {
|
span,
|
||||||
PathBuf::from(name)
|
)),
|
||||||
.extension()
|
(mime::APPLICATION, mime::JSON) => Ok((
|
||||||
.map(|name| name.to_string_lossy().to_string())
|
Some("json".to_string()),
|
||||||
});
|
Value::string(r.text().unwrap()),
|
||||||
|
span,
|
||||||
let extension = match r.headers().get("content-type") {
|
)),
|
||||||
Some(content_type) => {
|
(mime::IMAGE, image_ty) => {
|
||||||
let content_type =
|
let mut buf: Vec<u8> = vec![];
|
||||||
Mime::from_str(content_type.to_str().unwrap()).unwrap();
|
r.copy_to(&mut buf).map_err(|_| {
|
||||||
match (content_type.type_(), content_type.subtype()) {
|
ShellError::labeled_error(
|
||||||
(mime::APPLICATION, mime::XML) => Some("xml".to_string()),
|
"Could not load image file",
|
||||||
(mime::APPLICATION, mime::JSON) => Some("json".to_string()),
|
"could not load",
|
||||||
_ => path_extension,
|
span,
|
||||||
}
|
)
|
||||||
|
})?;
|
||||||
|
Ok((Some(image_ty.to_string()), Value::Binary(buf), span))
|
||||||
}
|
}
|
||||||
None => path_extension,
|
(mime::TEXT, mime::PLAIN) => {
|
||||||
};
|
let path_extension = r
|
||||||
|
.url()
|
||||||
|
.path_segments()
|
||||||
|
.and_then(|segments| segments.last())
|
||||||
|
.and_then(|name| if name.is_empty() { None } else { Some(name) })
|
||||||
|
.and_then(|name| {
|
||||||
|
PathBuf::from(name)
|
||||||
|
.extension()
|
||||||
|
.map(|name| name.to_string_lossy().to_string())
|
||||||
|
});
|
||||||
|
|
||||||
Ok((extension, Value::string(s), span))
|
Ok((path_extension, Value::string(r.text().unwrap()), span))
|
||||||
}
|
}
|
||||||
Err(_) => {
|
(ty, sub_ty) => Ok((
|
||||||
return Err(ShellError::labeled_error(
|
None,
|
||||||
"Web page contents corrupt",
|
Value::string(format!("Not yet support MIME type: {} {}", ty, sub_ty)),
|
||||||
"received garbled data",
|
span,
|
||||||
span,
|
)),
|
||||||
));
|
}
|
||||||
}
|
}
|
||||||
|
None => Ok((None, Value::string(format!("No content type found")), span)),
|
||||||
},
|
},
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
return Err(ShellError::labeled_error(
|
return Err(ShellError::labeled_error(
|
||||||
|
|
|
@ -7,19 +7,21 @@ macro_rules! nu {
|
||||||
use std::io::prelude::*;
|
use std::io::prelude::*;
|
||||||
use std::process::{Command, Stdio};
|
use std::process::{Command, Stdio};
|
||||||
|
|
||||||
let commands = &*format!("
|
let commands = &*format!(
|
||||||
|
"
|
||||||
cd {}
|
cd {}
|
||||||
{}
|
{}
|
||||||
exit",
|
exit",
|
||||||
$cwd,
|
$cwd, $commands
|
||||||
$commands);
|
);
|
||||||
|
|
||||||
let process = match Command::new(helpers::executable_path())
|
let process = match Command::new(helpers::executable_path())
|
||||||
.stdin(Stdio::piped())
|
.stdin(Stdio::piped())
|
||||||
.stdout(Stdio::piped())
|
.stdout(Stdio::piped())
|
||||||
.spawn() {
|
.spawn()
|
||||||
Ok(child) => child,
|
{
|
||||||
Err(why) => panic!("Can't run test {}", why.description()),
|
Ok(child) => child,
|
||||||
|
Err(why) => panic!("Can't run test {}", why.description()),
|
||||||
};
|
};
|
||||||
|
|
||||||
match process.stdin.unwrap().write_all(commands.as_bytes()) {
|
match process.stdin.unwrap().write_all(commands.as_bytes()) {
|
||||||
|
@ -44,16 +46,16 @@ macro_rules! nu {
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! nu_error {
|
macro_rules! nu_error {
|
||||||
($out:ident, $cwd:expr, $commands:expr) => {
|
($out:ident, $cwd:expr, $commands:expr) => {
|
||||||
use std::error::Error;
|
|
||||||
use std::io::prelude::*;
|
use std::io::prelude::*;
|
||||||
use std::process::{Command, Stdio};
|
use std::process::{Command, Stdio};
|
||||||
|
|
||||||
let commands = &*format!("
|
let commands = &*format!(
|
||||||
|
"
|
||||||
cd {}
|
cd {}
|
||||||
{}
|
{}
|
||||||
exit",
|
exit",
|
||||||
$cwd,
|
$cwd, $commands
|
||||||
$commands);
|
);
|
||||||
|
|
||||||
let mut process = Command::new(helpers::executable_path())
|
let mut process = Command::new(helpers::executable_path())
|
||||||
.stdin(Stdio::piped())
|
.stdin(Stdio::piped())
|
||||||
|
@ -62,20 +64,23 @@ macro_rules! nu_error {
|
||||||
.expect("couldn't run test");
|
.expect("couldn't run test");
|
||||||
|
|
||||||
let stdin = process.stdin.as_mut().expect("couldn't open stdin");
|
let stdin = process.stdin.as_mut().expect("couldn't open stdin");
|
||||||
stdin.write_all(commands.as_bytes()).expect("couldn't write to stdin");
|
stdin
|
||||||
|
.write_all(commands.as_bytes())
|
||||||
|
.expect("couldn't write to stdin");
|
||||||
|
|
||||||
|
let output = process
|
||||||
let output = process.wait_with_output().expect("couldn't read from stderr");
|
.wait_with_output()
|
||||||
|
.expect("couldn't read from stderr");
|
||||||
let $out = String::from_utf8_lossy(&output.stderr);
|
let $out = String::from_utf8_lossy(&output.stderr);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn executable_path() -> PathBuf {
|
pub fn executable_path() -> PathBuf {
|
||||||
let mut buf = PathBuf::new();
|
let mut buf = PathBuf::new();
|
||||||
buf.push("target");
|
buf.push("target");
|
||||||
buf.push("debug");
|
buf.push("debug");
|
||||||
buf.push("nu");
|
buf.push("nu");
|
||||||
buf
|
buf
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn in_directory(str: &str) -> &str {
|
pub fn in_directory(str: &str) -> &str {
|
||||||
|
|
Loading…
Reference in a new issue