From e8c878f4236c056b1c0c9308e2d49c5b23833963 Mon Sep 17 00:00:00 2001 From: sam-anthony Date: Sat, 26 Mar 2022 13:35:58 -0230 Subject: pressure and rough layout --- pressure.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 pressure.go (limited to 'pressure.go') diff --git a/pressure.go b/pressure.go new file mode 100644 index 0000000..f486552 --- /dev/null +++ b/pressure.go @@ -0,0 +1,54 @@ +package main + +import ( + "errors" + "fmt" +) + +type pressureUnit float32 + +const ( + pascal pressureUnit = 1 + kilopascal pressureUnit = 1_000 + bar pressureUnit = 100_000 + poundsPerSquareInch pressureUnit = 6_894.757 +) + +// pressureUnitStrings returns a slice of strings, each representing a +// pressureUnit. +// This is necessary because giu.Combo only works with strings. +func pressureUnitStrings() []string { + return []string{"Pa", "kPa", "bar", "psi"} +} + +const ( + defaultPressureUnit pressureUnit = kilopascal + // Used to index pressureUnitStrings + defaultPressureUnitIndex int32 = 1 // kPa +) + +func pressureUnitFromString(s string) (pressureUnit, error) { + // Each case corresponds to a value in pressureUnitStrings + switch s { + case "Pa": + return pascal, nil + case "kPa": + return kilopascal, nil + case "bar": + return bar, nil + case "psi": + return poundsPerSquareInch, nil + default: + return *new(pressureUnit), errors.New(fmt.Sprintf("invalid pressureUnit: '%s'", s)) + } +} + +type pressure struct { + val float32 + unit pressureUnit +} + +func (p pressure) asUnit(u pressureUnit) float32 { + pa := p.val * float32(p.unit) // Convert to pascals. + return pa / float32(u) // Convert to desired unit. +} -- cgit v1.2.3