improve code -> extract fn

This commit is contained in:
Loïc Riegel 2025-03-30 18:09:54 +02:00
parent b8ebb562ca
commit 259b19d4f7

View File

@ -579,37 +579,11 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value {
None => 0, None => 0,
}; };
let offset = match record.get("timezone") { let offset = match parse_timezone_from_record(record, &head, &span) {
Some(val) => match val { Ok(value) => value,
Value::String { val, internal_span } => { Err(err) => {
let offset: FixedOffset = match val.parse() { return err;
Ok(offset) => offset, }
Err(_) => {
return Value::error(
ShellError::IncorrectValue {
msg: "invalid timezone".to_string(),
val_span: head,
call_span: *internal_span,
},
span,
)
}
};
offset
}
other => {
return Value::error(
ShellError::OnlySupportsThisInputType {
exp_input_type: "string".to_string(),
wrong_type: other.get_type().to_string(),
dst_span: head,
src_span: other.span(),
},
span,
);
}
},
None => FixedOffset::east_opt(0).unwrap(),
}; };
let total_nanoseconds = nanosecond + microsecond * 1_000 + millisecond * 1_000_000; let total_nanoseconds = nanosecond + microsecond * 1_000 + millisecond * 1_000_000;
@ -700,6 +674,45 @@ fn parse_value_from_record_as_u32(
Ok(value) Ok(value)
} }
fn parse_timezone_from_record(
record: &Record,
head: &Span,
span: &Span,
) -> Result<FixedOffset, Value> {
match record.get("timezone") {
Some(val) => match val {
Value::String { val, internal_span } => {
let offset: FixedOffset = match val.parse() {
Ok(offset) => offset,
Err(_) => {
return Err(Value::error(
ShellError::IncorrectValue {
msg: "invalid timezone".to_string(),
val_span: *head,
call_span: *internal_span,
},
*span,
))
}
};
Ok(offset)
}
other => {
return Err(Value::error(
ShellError::OnlySupportsThisInputType {
exp_input_type: "string".to_string(),
wrong_type: other.get_type().to_string(),
dst_span: *head,
src_span: other.span(),
},
*span,
));
}
},
None => Ok(FixedOffset::east_opt(0).unwrap()),
}
}
fn list_human_readable_examples(span: Span) -> Value { fn list_human_readable_examples(span: Span) -> Value {
let examples: Vec<String> = vec![ let examples: Vec<String> = vec![
"Today 18:30".into(), "Today 18:30".into(),