All checks were successful
ci/woodpecker/push/build-image Pipeline was successful
63 lines
1.2 KiB
Go
63 lines
1.2 KiB
Go
package units
|
|
|
|
import (
|
|
"math"
|
|
|
|
"gitea.maximumdirect.net/ejr/weatherapi/internal/platform/constants"
|
|
)
|
|
|
|
type Converter interface {
|
|
TemperatureCToOutput(celsius *float64) *float64
|
|
SpeedKmhToOutput(kmh *float64) *float64
|
|
System() string
|
|
}
|
|
|
|
type USConverter struct{}
|
|
|
|
func (USConverter) System() string {
|
|
return "us"
|
|
}
|
|
|
|
func (USConverter) TemperatureCToOutput(celsius *float64) *float64 {
|
|
if celsius == nil {
|
|
return nil
|
|
}
|
|
f := round(constants.CelsiusToFahrenheit(*celsius), constants.TempFahrenheitPrecision)
|
|
return &f
|
|
}
|
|
|
|
func (USConverter) SpeedKmhToOutput(kmh *float64) *float64 {
|
|
if kmh == nil {
|
|
return nil
|
|
}
|
|
mph := round(constants.KmhToMph(*kmh), constants.WindMphPrecision)
|
|
return &mph
|
|
}
|
|
|
|
type MetricConverter struct{}
|
|
|
|
func (MetricConverter) System() string {
|
|
return "metric"
|
|
}
|
|
|
|
func (MetricConverter) TemperatureCToOutput(celsius *float64) *float64 {
|
|
return clone(celsius)
|
|
}
|
|
|
|
func (MetricConverter) SpeedKmhToOutput(kmh *float64) *float64 {
|
|
return clone(kmh)
|
|
}
|
|
|
|
func clone(v *float64) *float64 {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
out := *v
|
|
return &out
|
|
}
|
|
|
|
func round(v float64, precision int) float64 {
|
|
pow := math.Pow(10, float64(precision))
|
|
return math.Round(v*pow) / pow
|
|
}
|