Make a deep copy from src into dst. Copied from https://github.com/getlantern/deepcopy, commit 7f45deb8130a0acc553242eb0e009e3f6f3d9ce3 (Apache 2 licensed)
(dst interface{}, src interface{})
| 674 | // Make a deep copy from src into dst. |
| 675 | // Copied from https://github.com/getlantern/deepcopy, commit 7f45deb8130a0acc553242eb0e009e3f6f3d9ce3 (Apache 2 licensed) |
| 676 | func DeepCopyInefficient(dst interface{}, src interface{}) error { |
| 677 | if dst == nil { |
| 678 | return fmt.Errorf("dst cannot be nil") |
| 679 | } |
| 680 | if src == nil { |
| 681 | return fmt.Errorf("src cannot be nil") |
| 682 | } |
| 683 | b, err := JSONMarshal(src) |
| 684 | if err != nil { |
| 685 | return fmt.Errorf("Unable to marshal src: %s", err) |
| 686 | } |
| 687 | d := JSONDecoder(bytes.NewBuffer(b)) |
| 688 | d.UseNumber() |
| 689 | err = d.Decode(dst) |
| 690 | if err != nil { |
| 691 | return fmt.Errorf("Unable to unmarshal into dst: %s", err) |
| 692 | } |
| 693 | return nil |
| 694 | } |
| 695 | |
| 696 | // testRetryUntilTrue performs a short sleep-based retry loop until the timeout is reached or the |
| 697 | // criteria in RetryUntilTrueFunc is met. Intended to |