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

FormatDuration

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()) // "2h30m"

type Session struct {
ID *models.RecordID `json:"id,omitempty"`
Timeout models.CustomDuration `json:"timeout"`
}

See Also