1
0
mirror of https://github.com/rclone/rclone.git synced 2025-08-10 06:09:44 +02:00

box: fix about: cannot unmarshal number 1.0e+18 into Go struct field

Before this change rclone about was failing with

    cannot unmarshal number 1.0e+18 into Go struct field User.space_amount of type int64

As Box increased Enterprise accounts user.space_amount from 30PB to
1e+18 or 888.178PB returning it as a floating point number, not an integer.

This fix reads it as a float64 and clips it to the maximum value of an
int64 if necessary.
This commit is contained in:
Nick Craig-Wood
2025-07-30 18:02:39 +01:00
parent d3e3af377a
commit dc95f36bc1
2 changed files with 12 additions and 5 deletions

View File

@@ -271,9 +271,9 @@ type User struct {
ModifiedAt time.Time `json:"modified_at"`
Language string `json:"language"`
Timezone string `json:"timezone"`
SpaceAmount int64 `json:"space_amount"`
SpaceUsed int64 `json:"space_used"`
MaxUploadSize int64 `json:"max_upload_size"`
SpaceAmount float64 `json:"space_amount"`
SpaceUsed float64 `json:"space_used"`
MaxUploadSize float64 `json:"max_upload_size"`
Status string `json:"status"`
JobTitle string `json:"job_title"`
Phone string `json:"phone"`

View File

@@ -7,6 +7,7 @@ import (
"context"
"encoding/json"
"io"
"math"
"time"
"github.com/rclone/rclone/fs/hash"
@@ -335,9 +336,15 @@ type FlaggerNP interface {
}
// NewUsageValue makes a valid value
func NewUsageValue(value int64) *int64 {
func NewUsageValue[T interface {
int64 | uint64 | float64
}](value T) *int64 {
p := new(int64)
*p = value
if value > T(int64(math.MaxInt64)) {
*p = math.MaxInt64
} else {
*p = int64(value)
}
return p
}