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  }