mirror of
https://github.com/nushell/nushell.git
synced 2025-08-09 13:26:01 +02:00
add into record
command (#7225)
# Description This command converts things into records. <img width="466" alt="Screenshot 2022-11-24 at 2 10 54 PM" src="https://user-images.githubusercontent.com/343840/203858104-0e4445da-9c37-4c7c-97ec-68ec3515bc4b.png"> <img width="716" alt="Screenshot 2022-11-24 at 5 04 11 PM" src="https://user-images.githubusercontent.com/343840/203872621-48cab199-ba57-44fe-8f36-9e1469b9c4ef.png"> It also converts dates into record but I couldn't get the test harness to accept an example. Thanks to @WindSoilder for writing the "hard" parts of this. :) _(Thank you for improving Nushell. Please, check our [contributing guide](../CONTRIBUTING.md) and talk to the core team before making major changes.)_ _(Description of your pull request goes here. **Provide examples and/or screenshots** if your changes affect the user experience.)_ # User-Facing Changes _(List of all changes that impact the user experience here. This helps us keep track of breaking changes.)_ # Tests + Formatting Don't forget to add tests that cover your changes. Make sure you've run and fixed any issues with these commands: - `cargo fmt --all -- --check` to check standard code formatting (`cargo fmt --all` applies these changes) - `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A clippy::needless_collect` to check that you're using the standard code style - `cargo test --workspace` to check that all tests pass # After Submitting If your PR had any user-facing changes, update [the documentation](https://github.com/nushell/nushell.github.io) after the PR is merged, if necessary. This will help us keep the docs up to date. Co-authored-by: WindSoilder <WindSoilder@outlook.com>
This commit is contained in:
@ -2968,7 +2968,7 @@ pub fn is_leap_year(year: i32) -> bool {
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
enum TimePeriod {
|
||||
pub enum TimePeriod {
|
||||
Nanos(i64),
|
||||
Micros(i64),
|
||||
Millis(i64),
|
||||
@ -2982,18 +2982,18 @@ enum TimePeriod {
|
||||
}
|
||||
|
||||
impl TimePeriod {
|
||||
fn to_text(self) -> Cow<'static, str> {
|
||||
pub fn to_text(self) -> Cow<'static, str> {
|
||||
match self {
|
||||
Self::Nanos(n) => format!("{}ns", n).into(),
|
||||
Self::Micros(n) => format!("{}µs", n).into(),
|
||||
Self::Millis(n) => format!("{}ms", n).into(),
|
||||
Self::Seconds(n) => format!("{}sec", n).into(),
|
||||
Self::Minutes(n) => format!("{}min", n).into(),
|
||||
Self::Hours(n) => format!("{}hr", n).into(),
|
||||
Self::Days(n) => format!("{}day", n).into(),
|
||||
Self::Weeks(n) => format!("{}wk", n).into(),
|
||||
Self::Months(n) => format!("{}month", n).into(),
|
||||
Self::Years(n) => format!("{}yr", n).into(),
|
||||
Self::Nanos(n) => format!("{} ns", n).into(),
|
||||
Self::Micros(n) => format!("{} µs", n).into(),
|
||||
Self::Millis(n) => format!("{} ms", n).into(),
|
||||
Self::Seconds(n) => format!("{} sec", n).into(),
|
||||
Self::Minutes(n) => format!("{} min", n).into(),
|
||||
Self::Hours(n) => format!("{} hr", n).into(),
|
||||
Self::Days(n) => format!("{} day", n).into(),
|
||||
Self::Weeks(n) => format!("{} wk", n).into(),
|
||||
Self::Months(n) => format!("{} month", n).into(),
|
||||
Self::Years(n) => format!("{} yr", n).into(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3005,6 +3005,21 @@ impl Display for TimePeriod {
|
||||
}
|
||||
|
||||
pub fn format_duration(duration: i64) -> String {
|
||||
let (sign, periods) = format_duration_as_timeperiod(duration);
|
||||
|
||||
let text = periods
|
||||
.into_iter()
|
||||
.map(|p| p.to_text().to_string().replace(' ', ""))
|
||||
.collect::<Vec<String>>();
|
||||
|
||||
format!(
|
||||
"{}{}",
|
||||
if sign == -1 { "-" } else { "" },
|
||||
text.join(" ").trim()
|
||||
)
|
||||
}
|
||||
|
||||
pub fn format_duration_as_timeperiod(duration: i64) -> (i32, Vec<TimePeriod>) {
|
||||
// Attribution: most of this is taken from chrono-humanize-rs. Thanks!
|
||||
// https://gitlab.com/imp/chrono-humanize-rs/-/blob/master/src/humantime.rs
|
||||
const DAYS_IN_YEAR: i64 = 365;
|
||||
@ -3151,21 +3166,7 @@ pub fn format_duration(duration: i64) -> String {
|
||||
periods.push(TimePeriod::Seconds(0));
|
||||
}
|
||||
|
||||
// let last = periods.pop().map(|last| last.to_text().to_string());
|
||||
let text = periods
|
||||
.into_iter()
|
||||
.map(|p| p.to_text().to_string())
|
||||
.collect::<Vec<String>>();
|
||||
|
||||
// if let Some(last) = last {
|
||||
// text.push(format!("and {}", last));
|
||||
// }
|
||||
|
||||
format!(
|
||||
"{}{}",
|
||||
if sign == -1 { "-" } else { "" },
|
||||
text.join(" ").trim()
|
||||
)
|
||||
(sign, periods)
|
||||
}
|
||||
|
||||
pub fn format_filesize_from_conf(num_bytes: i64, config: &Config) -> String {
|
||||
|
Reference in New Issue
Block a user