Archived
1
0

Parse time as time.Time

This commit is contained in:
Arnaud Ysmal 2014-03-23 18:48:54 +01:00
parent c03c8754dc
commit 2496f9db0a

View File

@ -47,18 +47,18 @@ var ErrNotAuth = errors.New("authentication required")
// Account represents information about the user account. // Account represents information about the user account.
type Account struct { type Account struct {
ReferralLink string `json:"referral_link"` // URL for referral. ReferralLink string `json:"referral_link,omitempty"` // URL for referral.
DisplayName string `json:"display_name"` // User name. DisplayName string `json:"display_name,omitempty"` // User name.
UID int `json:"uid"` // User account ID. UID int `json:"uid,omitempty"` // User account ID.
Country string `json:"country"` // Country ISO code. Country string `json:"country,omitempty"` // Country ISO code.
QuotaInfo struct { QuotaInfo struct {
Shared int64 `json:"shared"` // Quota for shared files. Shared int64 `json:"shared,omitempty"` // Quota for shared files.
Quota int64 `json:"quota"` // Quota in bytes. Quota int64 `json:"quota,omitempty"` // Quota in bytes.
Normal int64 `json:"normal"` // Quota for non-shared files. Normal int64 `json:"normal,omitempty"` // Quota for non-shared files.
} `json:"quota_info"` } `json:"quota_info"`
} }
// CopyRef represents thr reply of CopyRef. // CopyRef represents the reply of CopyRef.
type CopyRef struct { type CopyRef struct {
CopyRef string `json:"copy_ref"` // Reference to use on fileops/copy. CopyRef string `json:"copy_ref"` // Reference to use on fileops/copy.
Expires string `json:"expires"` // Expiration date. Expires string `json:"expires"` // Expiration date.
@ -72,7 +72,7 @@ type DeltaPage struct {
Entries []DeltaEntry // List of changed entries. Entries []DeltaEntry // List of changed entries.
} }
// DeltaEntry represents the the list of changes for a given path. // DeltaEntry represents the list of changes for a given path.
type DeltaEntry struct { type DeltaEntry struct {
Path string // Path of this entry in lowercase. Path string // Path of this entry in lowercase.
Entry *Entry // nil when this entry does not exists. Entry *Entry // nil when this entry does not exists.
@ -88,10 +88,10 @@ type DeltaPoll struct {
type ChunkUploadResponse struct { type ChunkUploadResponse struct {
UploadID string `json:"upload_id"` // Unique ID of this upload. UploadID string `json:"upload_id"` // Unique ID of this upload.
Offset int `json:"offset"` // Size in bytes of already sent data. Offset int `json:"offset"` // Size in bytes of already sent data.
Expires string `json:"expires"` // Expiration time of this upload. Expires DBTime `json:"expires"` // Expiration time of this upload.
} }
// Format of reply when http error code is not 200 // Format of reply when http error code is not 200.
// Format may be: // Format may be:
// {"error": "reason"} // {"error": "reason"}
// {"error": {"param": "reason"}} // {"error": {"param": "reason"}}
@ -100,9 +100,9 @@ type requestError struct {
} }
const ( const (
// PollMinTimeout is the minimum timeout for longpoll // PollMinTimeout is the minimum timeout for longpoll.
PollMinTimeout = 30 PollMinTimeout = 30
// PollMaxTimeout is the maximum timeout for longpoll // PollMaxTimeout is the maximum timeout for longpoll.
PollMaxTimeout = 480 PollMaxTimeout = 480
// DefaultChunkSize is the maximum size of a file sendable using files_put. // DefaultChunkSize is the maximum size of a file sendable using files_put.
DefaultChunkSize = 4 * 1024 * 1024 DefaultChunkSize = 4 * 1024 * 1024
@ -124,34 +124,62 @@ const (
DateFormat = time.RFC1123Z DateFormat = time.RFC1123Z
) )
// DBTime allow marshalling and unmarshalling of time.
type DBTime time.Time
// UnmarshalJSON unmarshals a time according to the Dropbox format.
func (dbt *DBTime) UnmarshalJSON(data []byte) error {
var s string
var err error
var t time.Time
if err = json.Unmarshal(data, &s); err != nil {
return err
}
if t, err = time.ParseInLocation(DateFormat, s, time.UTC); err != nil {
return err
}
if t.IsZero() {
*dbt = DBTime(time.Time{})
} else {
*dbt = DBTime(t)
}
return nil
}
// MarshalJSON marshals a time according to the Dropbox format.
func (dbt DBTime) MarshalJSON() ([]byte, error) {
return json.Marshal(time.Time(dbt).Format(DateFormat))
}
// Entry represents the metadata of a file or folder. // Entry represents the metadata of a file or folder.
type Entry struct { type Entry struct {
Bytes int `json:"bytes"` // Size of the file in bytes. Bytes int `json:"bytes,omitempty"` // Size of the file in bytes.
ClientMtime string `json:"client_mtime"` // Modification time set by the client when added. ClientMtime DBTime `json:"client_mtime,omitempty"` // Modification time set by the client when added.
Contents []Entry `json:"contents"` // List of children for a directory. Contents []Entry `json:"contents,omitempty"` // List of children for a directory.
Hash string `json:"hash"` // hash of this entry. Hash string `json:"hash,omitempty"` // Hash of this entry.
Icon string `json:"icon"` // Name of the icon displayed for this entry. Icon string `json:"icon,omitempty"` // Name of the icon displayed for this entry.
IsDeleted bool `json:"is_deleted"` // true if this entry was deleted. IsDeleted bool `json:"is_deleted,omitempty"` // true if this entry was deleted.
IsDir bool `json:"is_dir"` // true if this entry is a directory. IsDir bool `json:"is_dir,omitempty"` // true if this entry is a directory.
MimeType string `json:"mime_type"` // MimeType of this entry. MimeType string `json:"mime_type,omitempty"` // MimeType of this entry.
Modified string `json:"modified"` // Date of last modification. Modified DBTime `json:"modified,omitempty"` // Date of last modification.
Path string `json:"path"` // Absolute path of this entry. Path string `json:"path,omitempty"` // Absolute path of this entry.
Revision string `json:"rev"` // Unique ID for this file revision. Revision string `json:"rev,omitempty"` // Unique ID for this file revision.
Root string `json:"root"` // dropbox or sandbox. Root string `json:"root,omitempty"` // dropbox or sandbox.
Size string `json:"size"` // Size of the file humanized/localized. Size string `json:"size,omitempty"` // Size of the file humanized/localized.
ThumbExists bool `json:"thumb_exists"` // true if a thumbnail is available for this entry. ThumbExists bool `json:"thumb_exists,omitempty"` // true if a thumbnail is available for this entry.
} }
// Link for sharing a file. // Link for sharing a file.
type Link struct { type Link struct {
Expires string `json:"expires"` // Expiration date of this link. Expires DBTime `json:"expires"` // Expiration date of this link.
URL string `json:"url"` // URL to share. URL string `json:"url"` // URL to share.
} }
// Dropbox client. // Dropbox client.
type Dropbox struct { type Dropbox struct {
RootDirectory string // dropbox or sandbox. RootDirectory string // dropbox or sandbox.
Locale string // Locale send to the API to translate/format messages. Locale string // Locale sent to the API to translate/format messages.
APIURL string // Normal API URL. APIURL string // Normal API URL.
APIContentURL string // URL for transferring files. APIContentURL string // URL for transferring files.
APINotifyURL string // URL for realtime notification. APINotifyURL string // URL for realtime notification.