Advertisement
pcwizz

Untitled

Feb 9th, 2015
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.54 KB | None | 0 0
  1. func updateExchangeRate(code string)error{
  2.     var rate float64
  3.     switch (code){
  4.         case "USD", "EUR", "CHF":
  5.             resp, err := http.Get("http://currency-api.appspot.com/api/GBP/"+code+".json?key="+currency_api_key)
  6.             if err != nil{
  7.                 return err
  8.             }
  9.             defer resp.Body.Close()
  10.             body, err := ioutil.ReadAll(resp.Body)
  11.             if err != nil {
  12.                 return err
  13.             }
  14.             var data struct{
  15.                 Success bool
  16.                 Source string
  17.                 Target string
  18.                 Rate float64
  19.                 Message string
  20.             }
  21.             err = json.Unmarshal(body, data)
  22.             if err != nil {
  23.                 return err
  24.             }
  25.             if data.Success != true {
  26.                 err = errors.New(data.Message)
  27.                 return err
  28.             }
  29.             rate = data.Rate
  30.             break
  31.         default:
  32.             err := errors.New("Unsupported currency code")
  33.             return err
  34.     }
  35.     CurrencyRates[code] = rate_obj{
  36.         Rate: rate,
  37.         Expiry: time.Now().Unix() + (12*60*60),//12 hour expiry
  38.     }
  39.     return nil
  40. }
  41.  
  42. func GetExchangeRate(code string)(float64, error){
  43.     if CurrencyRates[code].Rate == 0 || CurrencyRates[code].Expiry >= time.Now().Unix() {
  44.         err := updateExchangeRate(code)
  45.         return 0, err
  46.     }
  47.     return CurrencyRates[code].Rate, nil
  48. }
  49.  
  50. func ConvertCurrency(source, target string, value float64) (amount float64, err error){
  51.     var src_rate, tgt_rate float64
  52.     if source != "GBP"{
  53.         src_rate, err = GetExchangeRate(source)
  54.         if err != nil {
  55.             return
  56.         }
  57.     }else{
  58.         src_rate = 1.0
  59.     }
  60.     if target != "GBP"{
  61.         tgt_rate, err = GetExchangeRate(source)
  62.         if err != nil {
  63.             return
  64.         }
  65.     }else{
  66.         tgt_rate = 1.0
  67.     }
  68.     amount = value * (1/src_rate) * tgt_rate
  69.     return
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement