100 lines
1.6 KiB
Go
100 lines
1.6 KiB
Go
// helpers.go contains shared pointer and scalar conversion helpers.
|
|
// Layer: adapters/inbound/httpapi/presenter helper functions.
|
|
package presenter
|
|
|
|
import (
|
|
"math"
|
|
"time"
|
|
|
|
"gitea.maximumdirect.net/ejr/weatherfeeder/model"
|
|
)
|
|
|
|
func celsiusToFahrenheitPtr(v *float64) *float64 {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
out := (*v * celsiusToFahrenheitScale) + celsiusToFahrenheitOffset
|
|
return &out
|
|
}
|
|
|
|
func scalePtr(v *float64, factor float64) *float64 {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
out := *v * factor
|
|
return &out
|
|
}
|
|
|
|
func copyFloat64Ptr(v *float64) *float64 {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
out := *v
|
|
return &out
|
|
}
|
|
|
|
func copyBoolPtr(v *bool) *bool {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
out := *v
|
|
return &out
|
|
}
|
|
|
|
func copyTimePtr(v *time.Time) *time.Time {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
out := *v
|
|
return &out
|
|
}
|
|
|
|
func copyWMOCodePtr(v *model.WMOCode) *model.WMOCode {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
out := *v
|
|
return &out
|
|
}
|
|
|
|
func inLocationTime(v time.Time, loc *time.Location) time.Time {
|
|
if loc == nil {
|
|
return v
|
|
}
|
|
return v.In(loc)
|
|
}
|
|
|
|
func inLocationTimePtr(v *time.Time, loc *time.Location) *time.Time {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
out := inLocationTime(*v, loc)
|
|
return &out
|
|
}
|
|
|
|
func boolText(v *bool) string {
|
|
if v == nil {
|
|
return ""
|
|
}
|
|
if *v {
|
|
return "true"
|
|
}
|
|
return "false"
|
|
}
|
|
|
|
func roundedPtr(v *float64, precision int) *float64 {
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
out := roundFloat(*v, precision)
|
|
return &out
|
|
}
|
|
|
|
func roundFloat(v float64, precision int) float64 {
|
|
if precision <= 0 {
|
|
return math.Round(v)
|
|
}
|
|
factor := math.Pow10(precision)
|
|
return math.Round(v*factor) / factor
|
|
}
|