/* Copyright © 2023 NAME HERE */ package cmd import ( "fmt" "strconv" "strings" "github.com/spf13/cobra" ) // tempCmd represents the temp command var ( from string to string five_over_nine = float64(5) / float64(9) nine_over_five = float64(9) / float64(5) kconst = 273.15 rconst = 459.67 tempCmd = &cobra.Command{ Use: "temp", Short: "A brief description of your command", Long: `A longer description that spans multiple lines and likely contains examples and usage of using your command. For example: Cobra is a CLI library for Go that empowers applications. This application is a tool to generate the needed files to quickly create a Cobra application.`, Args: cobra.MatchAll(cobra.ExactArgs(1)), RunE: func(cmd *cobra.Command, args []string) error { err := cmd.ParseFlags(args) if err != nil { return err } in, err := strconv.ParseFloat(args[0], 64) if err != nil { return err } var out float64 switch strings.ToLower(cmd.Flag("from").Value.String()) { case "f", "farenheit": switch strings.ToLower(cmd.Flag("to").Value.String()) { case "f", "farenheit": out = in case "c", "celsius": out = ((in - 32) * five_over_nine) case "k", "kelvin": out = ((in-32)*five_over_nine + kconst) case "r", "rankine": out = in + rconst } case "c", "celsius": switch strings.ToLower(cmd.Flag("to").Value.String()) { case "f", "farenheit": out = in*nine_over_five + 32 case "c", "celsius": out = in case "k", "kelvin": out = in + kconst case "r", "rankine": out = in*nine_over_five + rconst + 32 } case "k", "kelvin": switch strings.ToLower(cmd.Flag("to").Value.String()) { case "f", "farenheit": out = (in-kconst)*nine_over_five + 32 case "c", "celsius": out = in - kconst case "k", "kelvin": out = in case "r", "rankine": out = in * nine_over_five } case "r", "rankine": switch strings.ToLower(cmd.Flag("to").Value.String()) { case "f", "farenheit": out = in - rconst case "c", "celsius": out = (in - (rconst + 32)) * nine_over_five case "k", "kelvin": out = in * five_over_nine case "r", "rankine": out = in } } fmt.Println(strconv.FormatFloat(out, 'f', 2, 64)) return nil }, } ) func init() { rootCmd.AddCommand(tempCmd) tempCmd.PersistentFlags().StringVarP(&from, "from", "f", "c", "unit system to convert from, (farenheit, celsius, kelvin)") tempCmd.PersistentFlags().StringVarP(&to, "to", "t", "f", "unit system to convert to, (farenheit, celsius, kelvin)") // Here you will define your flags and configuration settings. // Cobra supports Persistent Flags which will work for this command // and all subcommands, e.g.: // tempCmd.PersistentFlags().String("foo", "", "A help for foo") // Cobra supports local flags which will only run when this command // is called directly, e.g.: // tempCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") }