Add missing exa-prefixed units, from_string(), to_string(), update example
This commit is contained in:
		@@ -33,48 +33,6 @@ import os
 | 
			
		||||
import flag
 | 
			
		||||
import dataunits
 | 
			
		||||
 | 
			
		||||
const units = {
 | 
			
		||||
	'bit':    dataunits.bit
 | 
			
		||||
	'nibble': dataunits.nibble
 | 
			
		||||
	'bytes':  dataunits.bytes
 | 
			
		||||
	'kb':     dataunits.kb
 | 
			
		||||
	'mb':     dataunits.mb
 | 
			
		||||
	'gb':     dataunits.gb
 | 
			
		||||
	'tb':     dataunits.tb
 | 
			
		||||
	'pb':     dataunits.pb
 | 
			
		||||
	'zb':     dataunits.zb
 | 
			
		||||
	'yb':     dataunits.yb
 | 
			
		||||
	'kib':    dataunits.kib
 | 
			
		||||
	'mib':    dataunits.mib
 | 
			
		||||
	'gib':    dataunits.gib
 | 
			
		||||
	'tib':    dataunits.tib
 | 
			
		||||
	'pib':    dataunits.pib
 | 
			
		||||
	'zib':    dataunits.zib
 | 
			
		||||
	'yib':    dataunits.yib
 | 
			
		||||
	'kbit':   dataunits.kbit
 | 
			
		||||
	'mbit':   dataunits.mbit
 | 
			
		||||
	'gbit':   dataunits.gbit
 | 
			
		||||
	'tbit':   dataunits.tbit
 | 
			
		||||
	'pbit':   dataunits.pbit
 | 
			
		||||
	'zbit':   dataunits.zbit
 | 
			
		||||
	'ybit':   dataunits.ybit
 | 
			
		||||
	'kibit':  dataunits.kibit
 | 
			
		||||
	'mibit':  dataunits.mibit
 | 
			
		||||
	'gibit':  dataunits.gibit
 | 
			
		||||
	'tibit':  dataunits.tibit
 | 
			
		||||
	'pibit':  dataunits.pibit
 | 
			
		||||
	'zibit':  dataunits.zibit
 | 
			
		||||
	'yibit':  dataunits.yibit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn units_str() string {
 | 
			
		||||
	mut str := []string{}
 | 
			
		||||
	for key, _ in units {
 | 
			
		||||
		str << key
 | 
			
		||||
	}
 | 
			
		||||
	return str.join(', ')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@[name: 'dataunit']
 | 
			
		||||
struct FlagConfig {
 | 
			
		||||
	help bool
 | 
			
		||||
@@ -96,7 +54,7 @@ fn main() {
 | 
			
		||||
		flags.value = no_matches[0].f64()
 | 
			
		||||
	}
 | 
			
		||||
	if flags.help {
 | 
			
		||||
		println('convert the value between *from* and *to* units.')
 | 
			
		||||
		println('convert the value between data size units.')
 | 
			
		||||
		println('usage: dataunit -f <unit> -t <unit> <value>')
 | 
			
		||||
		println('options:')
 | 
			
		||||
		println('  -help      print this help message and exit')
 | 
			
		||||
@@ -112,15 +70,15 @@ fn main() {
 | 
			
		||||
		eprintln('no value passed, see -help for info')
 | 
			
		||||
		exit(2)
 | 
			
		||||
	}
 | 
			
		||||
	unit_from := units[flags.from.to_lower()] or {
 | 
			
		||||
		eprintln('invalid unit ${flags.from}, valid ones: ${units_str()}')
 | 
			
		||||
	src := dataunits.from_string(flags.from) or {
 | 
			
		||||
		eprintln('invalid source unit: ${err}')
 | 
			
		||||
		exit(1)
 | 
			
		||||
	}
 | 
			
		||||
	unit_to := units[flags.to.to_lower()] or {
 | 
			
		||||
		eprintln('invalid unit ${flags.to}, valid ones: ${units_str()}')
 | 
			
		||||
	dst := dataunits.from_string(flags.to) or {
 | 
			
		||||
		eprintln('invalid destination unit: ${err}')
 | 
			
		||||
		exit(1)
 | 
			
		||||
	}
 | 
			
		||||
	result := '${dataunits.convert(flags.value, unit_from, unit_to):.20f}'
 | 
			
		||||
	result := '${dataunits.convert(flags.value, src, dst):.20f}'
 | 
			
		||||
	splitted := result.split('.')
 | 
			
		||||
	if splitted[1].contains_only('0') {
 | 
			
		||||
		println(splitted[0])
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user