github.com/mikejeuga/temperature-converter@v0.0.0-20220721135550-2cf6fcec7145/src/internal/domain/temperature_conversion.go (about)

     1  package domain
     2  
     3  import (
     4  	"github.com/mikejeuga/temperature-converter/models"
     5  )
     6  
     7  type ConverterCtoF func(temp models.Celsius) (models.Fahrenheit, error)
     8  type ConverterFtoC func(temp models.Fahrenheit) (models.Celsius, error)
     9  
    10  type Converter struct {
    11  	CelsiusConverter    ConverterCtoF
    12  	FahrenheitConverter ConverterFtoC
    13  }
    14  
    15  func NewConverter(celsiusConverter ConverterCtoF, fahrenheitConverter ConverterFtoC) Converter {
    16  	return Converter{CelsiusConverter: celsiusConverter, FahrenheitConverter: fahrenheitConverter}
    17  }
    18  
    19  func (c Converter) ConvertCtoF(temp models.Celsius) (models.Fahrenheit, error) {
    20  	return c.CelsiusConverter(temp)
    21  }
    22  
    23  func (c Converter) ConvertFtoC(temp models.Fahrenheit) (models.Celsius, error) {
    24  	return c.FahrenheitConverter(temp)
    25  }
    26  
    27  func ConvertCtoF(temp models.Celsius) (models.Fahrenheit, error) {
    28  	result := (float64(temp) * 1.8) + 32
    29  	return models.Fahrenheit(result), nil
    30  }
    31  
    32  func ConvertFtoC(temp models.Fahrenheit) (models.Celsius, error) {
    33  	result := (float64(temp) - 32) / 1.8
    34  	return models.Celsius(result), nil
    35  }