code: func scanPrimitiveVal(src []byte, dest reflect.Value) error {
  	if len(src) == 0 {
  		return nil // skip blanks
  	}
  	switch dest.Kind() {
  	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
  		srcInt, err := strconv.ParseInt(string(src), 10, 0)
  		if err != nil {
  			return fmt.Errorf("zoom: could not convert %s to int", string(src))
  		}
  		dest.SetInt(srcInt)
  	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
  		srcUint, err := strconv.ParseUint(string(src), 10, 0)
  		if err != nil {
  			return fmt.Errorf("zoom: could not convert %s to uint", string(src))
  		}
  		dest.SetUint(srcUint)
  
  	case reflect.Float32, reflect.Float64:
  		srcFloat, err := strconv.ParseFloat(string(src), 64)
  		if err != nil {
  			return fmt.Errorf("zoom: could not convert %s to float", string(src))
  		}
  		dest.SetFloat(srcFloat)
  	case reflect.Bool:
  		srcBool, err := strconv.ParseBool(string(src))
  		if err != nil {
  			return fmt.Errorf("zoom: could not convert %s to bool", string(src))
  		}
  		dest.SetBool(srcBool)
  	case reflect.String:
  		dest.SetString(string(src))
  	case reflect.Slice, reflect.Array:
  		// Slice or array of bytes
  		dest.SetBytes(src)
  	default:
  		return fmt.Errorf("zoom: don't know how to scan primitive type: %T", src)
  	}
  	return nil
  }
docs: // scanPrimitiveVal converts a slice of bytes response from redis into the type of dest
  // and then sets dest to that value