githubEdit

Enum

The enum type provides type-safe enumerated values with a constrained set of allowed string values.

Overview

Property
Value

Go Type

Custom type implementing enum pattern

Database Schema

String union (e.g., "active" | "inactive")

CBOR Encoding

Direct (as string)

Sortable

Yes

Definition

Define an enum by creating a string type with constants:

package model

type Status string

const (
    StatusActive   Status = "active"
    StatusInactive Status = "inactive"
    StatusPending  Status = "pending"
)

// Enum marker method (required)
func (s Status) Enum() {}

type User struct {
    som.Node

    Name   string
    Status Status   // Required enum
    Role   *Role    // Optional enum
}

Multiple Enums

Schema

Generated SurrealDB schema with union type:

Filter Operations

Equality Operations

Set Membership

Comparison Operations

Enums can be compared lexicographically:

Nil Operations (Pointer Types Only)

Zero Value Check

Sorting

Common Patterns

Filter by Status

Multiple Allowed Values

Exclude Values

Optional Enum with Default

Count by Status

Enum Slices

Enums can be used in slices:

Query enum slices:

Complete Example

Best Practices

Use Constants

Always define constants for enum values:

Validation

The database schema ensures only valid values are stored. Invalid values will cause database errors:

Empty Values

Be careful with zero values:

Filter Reference Table

Operation
Description
Returns

Equal(val)

Exact match

Bool filter

NotEqual(val)

Not equal

Bool filter

In(vals...)

Value in set

Bool filter

NotIn(vals...)

Value not in set

Bool filter

LessThan(val)

Lexicographic <

Bool filter

LessThanEqual(val)

Lexicographic <=

Bool filter

GreaterThan(val)

Lexicographic >

Bool filter

GreaterThanEqual(val)

Lexicographic >=

Bool filter

Zero(bool)

Check empty

Bool filter

Truth()

To boolean

Bool filter

IsNil()

Is null (ptr)

Bool filter

IsNotNil()

Not null (ptr)

Bool filter

Last updated