conversions_rs 1.2.1

A comprehensive unit conversion library, CLI tool, and WebAssembly module with full SI (International System of Units) support
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
//! Time conversion functions organized by unit type
//! All conversions use seconds as the base unit for accuracy and consistency

/// Seconds conversion functions
pub mod seconds {
    /// Converts seconds to minutes.
    /// # Arguments
    /// * `value` - The time in seconds to convert
    pub fn to_minutes(value: f64) -> f64 {
        value / 60.0
    }

    /// Converts seconds to hours.
    /// # Arguments
    /// * `value` - The time in seconds to convert
    pub fn to_hours(value: f64) -> f64 {
        value / 3600.0
    }

    /// Converts seconds to days.
    /// # Arguments
    /// * `value` - The time in seconds to convert
    pub fn to_days(value: f64) -> f64 {
        value / 86400.0
    }

    /// Converts seconds to weeks.
    /// # Arguments
    /// * `value` - The time in seconds to convert
    pub fn to_weeks(value: f64) -> f64 {
        value / 604800.0
    }

    /// Converts seconds to years (365.25 days).
    /// # Arguments
    /// * `value` - The time in seconds to convert
    pub fn to_years(value: f64) -> f64 {
        value / 31557600.0 // 365.25 * 24 * 3600
    }

    /// Converts seconds to milliseconds.
    /// # Arguments
    /// * `value` - The time in seconds to convert
    pub fn to_milliseconds(value: f64) -> f64 {
        value * 1000.0
    }

    /// Converts seconds to microseconds.
    /// # Arguments
    /// * `value` - The time in seconds to convert
    pub fn to_microseconds(value: f64) -> f64 {
        value * 1_000_000.0
    }

    /// Converts seconds to nanoseconds.
    /// # Arguments
    /// * `value` - The time in seconds to convert
    pub fn to_nanoseconds(value: f64) -> f64 {
        value * 1_000_000_000.0
    }
}

/// Minutes conversion functions
pub mod minutes {
    /// Converts minutes to seconds.
    /// # Arguments
    /// * `value` - The time in minutes to convert
    pub fn to_seconds(value: f64) -> f64 {
        value * 60.0
    }

    /// Converts minutes to hours.
    /// # Arguments
    /// * `value` - The time in minutes to convert
    pub fn to_hours(value: f64) -> f64 {
        value / 60.0
    }

    /// Converts minutes to days.
    /// # Arguments
    /// * `value` - The time in minutes to convert
    pub fn to_days(value: f64) -> f64 {
        value / 1440.0
    }

    /// Converts minutes to weeks.
    /// # Arguments
    /// * `value` - The time in minutes to convert
    pub fn to_weeks(value: f64) -> f64 {
        value / 10080.0
    }

    /// Converts minutes to years.
    /// # Arguments
    /// * `value` - The time in minutes to convert
    pub fn to_years(value: f64) -> f64 {
        super::seconds::to_years(to_seconds(value))
    }

    /// Converts minutes to milliseconds.
    /// # Arguments
    /// * `value` - The time in minutes to convert
    pub fn to_milliseconds(value: f64) -> f64 {
        super::seconds::to_milliseconds(to_seconds(value))
    }

    /// Converts minutes to microseconds.
    /// # Arguments
    /// * `value` - The time in minutes to convert
    pub fn to_microseconds(value: f64) -> f64 {
        super::seconds::to_microseconds(to_seconds(value))
    }

    /// Converts minutes to nanoseconds.
    /// # Arguments
    /// * `value` - The time in minutes to convert
    pub fn to_nanoseconds(value: f64) -> f64 {
        super::seconds::to_nanoseconds(to_seconds(value))
    }
}

/// Hours conversion functions
pub mod hours {
    /// Converts hours to seconds.
    /// # Arguments
    /// * `value` - The time in hours to convert
    pub fn to_seconds(value: f64) -> f64 {
        value * 3600.0
    }

    /// Converts hours to minutes.
    /// # Arguments
    /// * `value` - The time in hours to convert
    pub fn to_minutes(value: f64) -> f64 {
        value * 60.0
    }

    /// Converts hours to days.
    /// # Arguments
    /// * `value` - The time in hours to convert
    pub fn to_days(value: f64) -> f64 {
        value / 24.0
    }

    /// Converts hours to weeks.
    /// # Arguments
    /// * `value` - The time in hours to convert
    pub fn to_weeks(value: f64) -> f64 {
        value / 168.0
    }

    /// Converts hours to years.
    /// # Arguments
    /// * `value` - The time in hours to convert
    pub fn to_years(value: f64) -> f64 {
        super::seconds::to_years(to_seconds(value))
    }

    /// Converts hours to milliseconds.
    /// # Arguments
    /// * `value` - The time in hours to convert
    pub fn to_milliseconds(value: f64) -> f64 {
        super::seconds::to_milliseconds(to_seconds(value))
    }

    /// Converts hours to microseconds.
    /// # Arguments
    /// * `value` - The time in hours to convert
    pub fn to_microseconds(value: f64) -> f64 {
        super::seconds::to_microseconds(to_seconds(value))
    }

    /// Converts hours to nanoseconds.
    /// # Arguments
    /// * `value` - The time in hours to convert
    pub fn to_nanoseconds(value: f64) -> f64 {
        super::seconds::to_nanoseconds(to_seconds(value))
    }
}

/// Days conversion functions
pub mod days {
    /// Converts days to seconds.
    /// # Arguments
    /// * `value` - The time in days to convert
    pub fn to_seconds(value: f64) -> f64 {
        value * 86400.0
    }

    /// Converts days to minutes.
    /// # Arguments
    /// * `value` - The time in days to convert
    pub fn to_minutes(value: f64) -> f64 {
        value * 1440.0
    }

    /// Converts days to hours.
    /// # Arguments
    /// * `value` - The time in days to convert
    pub fn to_hours(value: f64) -> f64 {
        value * 24.0
    }

    /// Converts days to weeks.
    /// # Arguments
    /// * `value` - The time in days to convert
    pub fn to_weeks(value: f64) -> f64 {
        value / 7.0
    }

    /// Converts days to years.
    /// # Arguments
    /// * `value` - The time in days to convert
    pub fn to_years(value: f64) -> f64 {
        value / 365.25
    }

    /// Converts days to milliseconds.
    /// # Arguments
    /// * `value` - The time in days to convert
    pub fn to_milliseconds(value: f64) -> f64 {
        super::seconds::to_milliseconds(to_seconds(value))
    }

    /// Converts days to microseconds.
    /// # Arguments
    /// * `value` - The time in days to convert
    pub fn to_microseconds(value: f64) -> f64 {
        super::seconds::to_microseconds(to_seconds(value))
    }

    /// Converts days to nanoseconds.
    /// # Arguments
    /// * `value` - The time in days to convert
    pub fn to_nanoseconds(value: f64) -> f64 {
        super::seconds::to_nanoseconds(to_seconds(value))
    }
}

/// Weeks conversion functions
pub mod weeks {
    /// Converts weeks to seconds.
    /// # Arguments
    /// * `value` - The time in weeks to convert
    pub fn to_seconds(value: f64) -> f64 {
        value * 604800.0
    }

    /// Converts weeks to minutes.
    /// # Arguments
    /// * `value` - The time in weeks to convert
    pub fn to_minutes(value: f64) -> f64 {
        value * 10080.0
    }

    /// Converts weeks to hours.
    /// # Arguments
    /// * `value` - The time in weeks to convert
    pub fn to_hours(value: f64) -> f64 {
        value * 168.0
    }

    /// Converts weeks to days.
    /// # Arguments
    /// * `value` - The time in weeks to convert
    pub fn to_days(value: f64) -> f64 {
        value * 7.0
    }

    /// Converts weeks to years.
    /// # Arguments
    /// * `value` - The time in weeks to convert
    pub fn to_years(value: f64) -> f64 {
        super::days::to_years(to_days(value))
    }

    /// Converts weeks to milliseconds.
    /// # Arguments
    /// * `value` - The time in weeks to convert
    pub fn to_milliseconds(value: f64) -> f64 {
        super::seconds::to_milliseconds(to_seconds(value))
    }

    /// Converts weeks to microseconds.
    /// # Arguments
    /// * `value` - The time in weeks to convert
    pub fn to_microseconds(value: f64) -> f64 {
        super::seconds::to_microseconds(to_seconds(value))
    }

    /// Converts weeks to nanoseconds.
    /// # Arguments
    /// * `value` - The time in weeks to convert
    pub fn to_nanoseconds(value: f64) -> f64 {
        super::seconds::to_nanoseconds(to_seconds(value))
    }
}

/// Years conversion functions
pub mod years {
    /// Converts years to seconds.
    /// # Arguments
    /// * `value` - The time in years to convert
    pub fn to_seconds(value: f64) -> f64 {
        value * 31557600.0 // 365.25 * 24 * 3600
    }

    /// Converts years to minutes.
    /// # Arguments
    /// * `value` - The time in years to convert
    pub fn to_minutes(value: f64) -> f64 {
        super::seconds::to_minutes(to_seconds(value))
    }

    /// Converts years to hours.
    /// # Arguments
    /// * `value` - The time in years to convert
    pub fn to_hours(value: f64) -> f64 {
        super::seconds::to_hours(to_seconds(value))
    }

    /// Converts years to days.
    /// # Arguments
    /// * `value` - The time in years to convert
    pub fn to_days(value: f64) -> f64 {
        value * 365.25
    }

    /// Converts years to weeks.
    /// # Arguments
    /// * `value` - The time in years to convert
    pub fn to_weeks(value: f64) -> f64 {
        super::days::to_weeks(to_days(value))
    }

    /// Converts years to milliseconds.
    /// # Arguments
    /// * `value` - The time in years to convert
    pub fn to_milliseconds(value: f64) -> f64 {
        super::seconds::to_milliseconds(to_seconds(value))
    }

    /// Converts years to microseconds.
    /// # Arguments
    /// * `value` - The time in years to convert
    pub fn to_microseconds(value: f64) -> f64 {
        super::seconds::to_microseconds(to_seconds(value))
    }

    /// Converts years to nanoseconds.
    /// # Arguments
    /// * `value` - The time in years to convert
    pub fn to_nanoseconds(value: f64) -> f64 {
        super::seconds::to_nanoseconds(to_seconds(value))
    }
}

/// Milliseconds conversion functions
pub mod milliseconds {
    /// Converts milliseconds to seconds.
    /// # Arguments
    /// * `value` - The time in milliseconds to convert
    pub fn to_seconds(value: f64) -> f64 {
        value / 1000.0
    }

    /// Converts milliseconds to minutes.
    /// # Arguments
    /// * `value` - The time in milliseconds to convert
    pub fn to_minutes(value: f64) -> f64 {
        super::seconds::to_minutes(to_seconds(value))
    }

    /// Converts milliseconds to hours.
    /// # Arguments
    /// * `value` - The time in milliseconds to convert
    pub fn to_hours(value: f64) -> f64 {
        super::seconds::to_hours(to_seconds(value))
    }

    /// Converts milliseconds to days.
    /// # Arguments
    /// * `value` - The time in milliseconds to convert
    pub fn to_days(value: f64) -> f64 {
        super::seconds::to_days(to_seconds(value))
    }

    /// Converts milliseconds to weeks.
    /// # Arguments
    /// * `value` - The time in milliseconds to convert
    pub fn to_weeks(value: f64) -> f64 {
        super::seconds::to_weeks(to_seconds(value))
    }

    /// Converts milliseconds to years.
    /// # Arguments
    /// * `value` - The time in milliseconds to convert
    pub fn to_years(value: f64) -> f64 {
        super::seconds::to_years(to_seconds(value))
    }

    /// Converts milliseconds to microseconds.
    /// # Arguments
    /// * `value` - The time in milliseconds to convert
    pub fn to_microseconds(value: f64) -> f64 {
        value * 1000.0
    }

    /// Converts milliseconds to nanoseconds.
    /// # Arguments
    /// * `value` - The time in milliseconds to convert
    pub fn to_nanoseconds(value: f64) -> f64 {
        value * 1_000_000.0
    }
}

/// Microseconds conversion functions
pub mod microseconds {
    /// Converts microseconds to seconds.
    /// # Arguments
    /// * `value` - The time in microseconds to convert
    pub fn to_seconds(value: f64) -> f64 {
        value / 1_000_000.0
    }

    /// Converts microseconds to minutes.
    /// # Arguments
    /// * `value` - The time in microseconds to convert
    pub fn to_minutes(value: f64) -> f64 {
        super::seconds::to_minutes(to_seconds(value))
    }

    /// Converts microseconds to hours.
    /// # Arguments
    /// * `value` - The time in microseconds to convert
    pub fn to_hours(value: f64) -> f64 {
        super::seconds::to_hours(to_seconds(value))
    }

    /// Converts microseconds to days.
    /// # Arguments
    /// * `value` - The time in microseconds to convert
    pub fn to_days(value: f64) -> f64 {
        super::seconds::to_days(to_seconds(value))
    }

    /// Converts microseconds to weeks.
    /// # Arguments
    /// * `value` - The time in microseconds to convert
    pub fn to_weeks(value: f64) -> f64 {
        super::seconds::to_weeks(to_seconds(value))
    }

    /// Converts microseconds to years.
    /// # Arguments
    /// * `value` - The time in microseconds to convert
    pub fn to_years(value: f64) -> f64 {
        super::seconds::to_years(to_seconds(value))
    }

    /// Converts microseconds to milliseconds.
    /// # Arguments
    /// * `value` - The time in microseconds to convert
    pub fn to_milliseconds(value: f64) -> f64 {
        value / 1000.0
    }

    /// Converts microseconds to nanoseconds.
    /// # Arguments
    /// * `value` - The time in microseconds to convert
    pub fn to_nanoseconds(value: f64) -> f64 {
        value * 1000.0
    }
}

/// Nanoseconds conversion functions
pub mod nanoseconds {
    /// Converts nanoseconds to seconds.
    /// # Arguments
    /// * `value` - The time in nanoseconds to convert
    pub fn to_seconds(value: f64) -> f64 {
        value / 1_000_000_000.0
    }

    /// Converts nanoseconds to minutes.
    /// # Arguments
    /// * `value` - The time in nanoseconds to convert
    pub fn to_minutes(value: f64) -> f64 {
        super::seconds::to_minutes(to_seconds(value))
    }

    /// Converts nanoseconds to hours.
    /// # Arguments
    /// * `value` - The time in nanoseconds to convert
    pub fn to_hours(value: f64) -> f64 {
        super::seconds::to_hours(to_seconds(value))
    }

    /// Converts nanoseconds to days.
    /// # Arguments
    /// * `value` - The time in nanoseconds to convert
    pub fn to_days(value: f64) -> f64 {
        super::seconds::to_days(to_seconds(value))
    }

    /// Converts nanoseconds to weeks.
    /// # Arguments
    /// * `value` - The time in nanoseconds to convert
    pub fn to_weeks(value: f64) -> f64 {
        super::seconds::to_weeks(to_seconds(value))
    }

    /// Converts nanoseconds to years.
    /// # Arguments
    /// * `value` - The time in nanoseconds to convert
    pub fn to_years(value: f64) -> f64 {
        super::seconds::to_years(to_seconds(value))
    }

    /// Converts nanoseconds to milliseconds.
    /// # Arguments
    /// * `value` - The time in nanoseconds to convert
    pub fn to_milliseconds(value: f64) -> f64 {
        value / 1_000_000.0
    }

    /// Converts nanoseconds to microseconds.
    /// # Arguments
    /// * `value` - The time in nanoseconds to convert
    pub fn to_microseconds(value: f64) -> f64 {
        value / 1000.0
    }
}

// Legacy function wrappers for backward compatibility
pub fn seconds_to_minutes(seconds: f64) -> f64 {
    seconds::to_minutes(seconds)
}

pub fn minutes_to_seconds(minutes: f64) -> f64 {
    minutes::to_seconds(minutes)
}

pub fn hours_to_seconds(hours: f64) -> f64 {
    hours::to_seconds(hours)
}

pub fn seconds_to_hours(seconds: f64) -> f64 {
    seconds::to_hours(seconds)
}

pub fn days_to_hours(days: f64) -> f64 {
    days::to_hours(days)
}

pub fn hours_to_days(hours: f64) -> f64 {
    hours::to_days(hours)
}

pub fn weeks_to_days(weeks: f64) -> f64 {
    weeks::to_days(weeks)
}

pub fn days_to_weeks(days: f64) -> f64 {
    days::to_weeks(days)
}

pub fn years_to_days(years: f64) -> f64 {
    years::to_days(years)
}

pub fn days_to_years(days: f64) -> f64 {
    days::to_years(days)
}

pub fn milliseconds_to_seconds(ms: f64) -> f64 {
    milliseconds::to_seconds(ms)
}

pub fn seconds_to_milliseconds(seconds: f64) -> f64 {
    seconds::to_milliseconds(seconds)
}

pub fn microseconds_to_seconds(us: f64) -> f64 {
    microseconds::to_seconds(us)
}

pub fn seconds_to_microseconds(seconds: f64) -> f64 {
    seconds::to_microseconds(seconds)
}

pub fn nanoseconds_to_seconds(ns: f64) -> f64 {
    nanoseconds::to_seconds(ns)
}

pub fn seconds_to_nanoseconds(seconds: f64) -> f64 {
    seconds::to_nanoseconds(seconds)
}

/// General time conversion function that accepts string unit names
///
/// Converts a time value from one unit to another using string identifiers.
/// This function is case-insensitive and supports common abbreviations.
///
/// # Arguments
///
/// * `value` - The numeric value to convert
/// * `from_unit` - The source unit (e.g., "s", "min", "h", "day", "week", "year", "ms", "us", "ns")
/// * `to_unit` - The target unit using the same abbreviations
///
/// # Returns
/// * `Ok(f64)` - The converted value
/// * `Err(String)` - Error message if the conversion is not supported
///
/// # Examples
///
/// ```rust
/// use conversions_rs::convert_time;
///
/// let minutes = convert_time(3600.0, "s", "min").unwrap();
/// assert_eq!(minutes, 60.0);
///
/// let milliseconds = convert_time(2.5, "s", "ms").unwrap();
/// assert_eq!(milliseconds, 2500.0);
/// ```
pub fn convert_time(value: f64, from_unit: &str, to_unit: &str) -> Result<f64, String> {
    let from_unit = from_unit.to_lowercase();
    let to_unit = to_unit.to_lowercase();

    // Convert input to seconds first
    let seconds = match from_unit.as_str() {
        "s" | "sec" | "second" | "seconds" => value,
        "min" | "minute" | "minutes" => minutes::to_seconds(value),
        "h" | "hr" | "hour" | "hours" => hours::to_seconds(value),
        "d" | "day" | "days" => days::to_seconds(value),
        "w" | "week" | "weeks" => weeks::to_seconds(value),
        "y" | "year" | "years" => years::to_seconds(value),
        "ms" | "millisecond" | "milliseconds" => milliseconds::to_seconds(value),
        "us" | "μs" | "microsecond" | "microseconds" => microseconds::to_seconds(value),
        "ns" | "nanosecond" | "nanoseconds" => nanoseconds::to_seconds(value),
        _ => return Err(format!("Unsupported time unit: {}", from_unit)),
    };

    // Convert seconds to target unit
    let result = match to_unit.as_str() {
        "s" | "sec" | "second" | "seconds" => seconds,
        "min" | "minute" | "minutes" => seconds::to_minutes(seconds),
        "h" | "hr" | "hour" | "hours" => seconds::to_hours(seconds),
        "d" | "day" | "days" => seconds::to_days(seconds),
        "w" | "week" | "weeks" => seconds::to_weeks(seconds),
        "y" | "year" | "years" => seconds::to_years(seconds),
        "ms" | "millisecond" | "milliseconds" => seconds::to_milliseconds(seconds),
        "us" | "μs" | "microsecond" | "microseconds" => seconds::to_microseconds(seconds),
        "ns" | "nanosecond" | "nanoseconds" => seconds::to_nanoseconds(seconds),
        _ => return Err(format!("Unsupported time unit: {}", to_unit)),
    };

    Ok(result)
}