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 }