github.com/mikejeuga/temperature-converter@v0.0.0-20220721135550-2cf6fcec7145/src/internal/adapters/cli/command.go (about) 1 package cli 2 3 import ( 4 "fmt" 5 "github.com/mikejeuga/temperature-converter/models" 6 "github.com/mikejeuga/temperature-converter/src/internal/domain" 7 "io" 8 "strconv" 9 ) 10 11 type CLI struct { 12 tempConverter domain.Converter 13 } 14 15 func (c CLI) ConvertCtoF(w io.Writer, r io.Reader) { 16 readAll, err := io.ReadAll(r) 17 if err != nil { 18 fmt.Errorf("error reading data from r, %v", err) 19 } 20 21 input := string(readAll) 22 23 float, err := strconv.ParseFloat(input, 64) 24 if err != nil { 25 fmt.Errorf("converting string to float, %v", err) 26 } 27 28 celsius := models.Celsius(float) 29 fahrenheit, err := c.tempConverter.ConvertCtoF(celsius) 30 if err != nil { 31 fmt.Errorf("error converting Celsius to Fahrenheit, %v", err) 32 } 33 34 fmt.Fprintf(w, "%v", fahrenheit) 35 } 36 37 func (c CLI) ConvertFtoC(w io.Writer, r io.Reader) { 38 readAll, err := io.ReadAll(r) 39 if err != nil { 40 fmt.Errorf("error reading data from r, %v", err) 41 } 42 43 input := string(readAll) 44 45 float, err := strconv.ParseFloat(input, 64) 46 if err != nil { 47 fmt.Errorf("converting string to float, %v", err) 48 } 49 50 m := models.Fahrenheit(float) 51 fahrenheit, err := c.tempConverter.ConvertFtoC(m) 52 if err != nil { 53 fmt.Errorf("error converting Celsius to Fahrenheit, %v", err) 54 } 55 56 fmt.Fprintf(w, "%v", fahrenheit) 57 } 58 59 func NewCLI() *CLI { 60 converter := domain.NewConverter(domain.ConvertCtoF, domain.ConvertFtoC) 61 return &CLI{tempConverter: converter} 62 }