CustomDuration
The CustomDuration struct wraps Go’s time.Duration and handles CBOR encoding with tag 14 as specified by SurrealDB. It stores durations as a [seconds, nanoseconds] pair and formats them using SurrealDB’s human-readable syntax (e.g., 1d2h30m).
Package: github.com/surrealdb/surrealdb.go/pkg/models
Source: pkg/models/duration.go
Definition
type CustomDuration struct {
time.Duration
}
CustomDuration embeds time.Duration, so all standard time.Duration methods are available directly.
Methods
.String()
Returns the duration formatted in SurrealDB syntax (e.g., 2h30m, 1d12h, 500ms).
Syntax
s := dur.String()
Returns: string
.ToCustomDurationString()
Converts to a CustomDurationString value.
Syntax
ds := dur.ToCustomDurationString()
Returns: CustomDurationString
CustomDurationString
A string type for durations in SurrealDB format (e.g., "1d2h30m"). Encoded with CBOR tag 13.
type CustomDurationString string
Methods
.String() — returns the string value.ToDuration() — parses into time.Duration.ToCustomDuration() — converts to CustomDuration
Helper Functions
Formats nanoseconds into SurrealDB duration syntax.
Syntax
s := models.FormatDuration(ns)
Returns: string
ParseDuration
Parses a SurrealDB duration string into nanoseconds.
Syntax
ns, err := models.ParseDuration("1d2h30m")
Returns: (int64, error)
Supported units: y, w, d, h, m, s, ms, us/µs, ns.
Usage
import "github.com/surrealdb/surrealdb.go/pkg/models"
dur := models.CustomDuration{Duration: 2*time.Hour + 30*time.Minute}
fmt.Println(dur.String())
type Session struct {
ID *models.RecordID `json:"id,omitempty"`
Timeout models.CustomDuration `json:"timeout"`
}
See Also