Add mph and km units
This commit is contained in:
		@@ -12,6 +12,7 @@ const (
 | 
			
		||||
	MetersPerSecond   Speed = "MetersPerSecond"
 | 
			
		||||
	KilometersPerHour Speed = "KilometersPerHour"
 | 
			
		||||
	Knots             Speed = "Knots"
 | 
			
		||||
	MilesPerHour      Speed = "MilesPerHour"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Convert converts a value from one unit to another
 | 
			
		||||
@@ -29,22 +30,36 @@ func (sf Speed) Convert(st Speed, val int) int {
 | 
			
		||||
		return int(float64(val) * 1.94384)
 | 
			
		||||
	case sf == Knots && st == MetersPerSecond:
 | 
			
		||||
		return int(float64(val) / 1.94384)
 | 
			
		||||
	case sf == MilesPerHour && st == KilometersPerHour:
 | 
			
		||||
		return int(float64(val) * 1.60934)
 | 
			
		||||
	case sf == KilometersPerHour && st == MilesPerHour:
 | 
			
		||||
		return int(float64(val) / 1.60934)
 | 
			
		||||
	case sf == MilesPerHour && st == MetersPerSecond:
 | 
			
		||||
		return int(float64(val) * 0.44704)
 | 
			
		||||
	case sf == MetersPerSecond && st == MilesPerHour:
 | 
			
		||||
		return int(float64(val) / 0.44704)
 | 
			
		||||
	case sf == MilesPerHour && st == Knots:
 | 
			
		||||
		return int(float64(val) * 0.868976)
 | 
			
		||||
	case sf == Knots && st == MilesPerHour:
 | 
			
		||||
		return int(float64(val) / 0.868976)
 | 
			
		||||
	default:
 | 
			
		||||
		return val
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParseSpeed parses a speed value. Valid inputs include:
 | 
			
		||||
// mps, m/s, kmh, kph, kt, and kts.
 | 
			
		||||
// mps, m/s, kmh, kph, kt, kts, mph, and milesperhour.
 | 
			
		||||
// This function is case-insensitive.
 | 
			
		||||
func ParseSpeed(s string) (Speed, bool) {
 | 
			
		||||
	switch strings.ToLower(s) {
 | 
			
		||||
	case "m/s", "mps", "meterspersecond", "meters per second":
 | 
			
		||||
	case "m/s", "mps", "meterspersecond", "meters per second", "metrespersecond", "metres per second":
 | 
			
		||||
		return MetersPerSecond, true
 | 
			
		||||
	case "kmh", "kph", "km/h", "kilometersperhour", "kilometers per hour":
 | 
			
		||||
	case "kmh", "kph", "km/h", "kilometersperhour", "kilometers per hour", "kilometresperhour", "kilometres per hour":
 | 
			
		||||
		return KilometersPerHour, true
 | 
			
		||||
	case "kt", "kts", "knot", "knots":
 | 
			
		||||
		return Knots, true
 | 
			
		||||
	case "mph", "milesperhour", "miles per hour":
 | 
			
		||||
		return MilesPerHour, true
 | 
			
		||||
	default:
 | 
			
		||||
		return "", false
 | 
			
		||||
	}
 | 
			
		||||
@@ -55,8 +70,9 @@ type Distance string
 | 
			
		||||
 | 
			
		||||
// Distance units
 | 
			
		||||
const (
 | 
			
		||||
	Miles  Distance = "Miles"
 | 
			
		||||
	Meters Distance = "Meters"
 | 
			
		||||
	Miles      Distance = "Miles"
 | 
			
		||||
	Meters     Distance = "Meters"
 | 
			
		||||
	Kilometers Distance = "Kilometers"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Convert converts a value from one unit to another
 | 
			
		||||
@@ -66,19 +82,30 @@ func (df Distance) Convert(dt Distance, val float64) float64 {
 | 
			
		||||
		return val * 1609
 | 
			
		||||
	case df == Meters && dt == Miles:
 | 
			
		||||
		return val / 1609
 | 
			
		||||
	case df == Kilometers && dt == Meters:
 | 
			
		||||
		return val * 1000
 | 
			
		||||
	case df == Meters && dt == Kilometers:
 | 
			
		||||
		return val / 1000
 | 
			
		||||
	case df == Miles && dt == Kilometers:
 | 
			
		||||
		return val * 1.60934
 | 
			
		||||
	case df == Kilometers && dt == Miles:
 | 
			
		||||
		return val / 1.60934
 | 
			
		||||
	default:
 | 
			
		||||
		return val
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParseDistance parses a speed value. Valid inputs include:
 | 
			
		||||
// sm, mi, and m. This function is case-insensitive.
 | 
			
		||||
// ParseDistance parses a distance value. Valid inputs include:
 | 
			
		||||
// sm, mi, m, km, and kilometers.
 | 
			
		||||
// This function is case-insensitive.
 | 
			
		||||
func ParseDistance(s string) (Distance, bool) {
 | 
			
		||||
	switch strings.ToLower(s) {
 | 
			
		||||
	case "sm", "mi", "mile", "miles":
 | 
			
		||||
		return Miles, true
 | 
			
		||||
	case "m", "meter", "meters":
 | 
			
		||||
	case "m", "meter", "meters", "metre", "metres":
 | 
			
		||||
		return Meters, true
 | 
			
		||||
	case "km", "kilometer", "kilometers", "kilometre", "kilometres":
 | 
			
		||||
		return Kilometers, true
 | 
			
		||||
	default:
 | 
			
		||||
		return "", false
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user