examples

package
v0.4.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 30, 2025 License: MIT Imports: 0 Imported by: 0

Documentation

Overview

Package examples contains example enum definitions for testing and documentation purposes. These enums are used in the examples to demonstrate the functionality of goenums.

Example (BasicEnum)

Example_basicEnum demonstrates the most basic usage of goenums. This shows how to define a simple enum and use the generated methods.

package main

import (
	"fmt"

	"github.com/zarldev/goenums/examples/solarsystem"
)

func main() {
	// Using the Planet enum from the solarsystem package
	planet := solarsystem.Planets.EARTH // Index 3 (Earth)

	// String representation
	fmt.Println("Planet:", planet.String())

	// Parsing from string
	parsed, err := solarsystem.ParsePlanet("Mars")
	if err == nil {
		fmt.Println("Parsed:", parsed.String())
	}

	// Validation
	fmt.Println("Is valid:", planet.IsValid())

}
Output:

Planet: Earth
Parsed: Mars
Is valid: true
Example (BinaryMarshaling)

Example_binaryMarshaling demonstrates binary marshaling and unmarshaling. This shows how enums can be serialized to binary formats.

package main

import (
	"fmt"

	"github.com/zarldev/goenums/examples/solarsystem"
)

func main() {
	planet := solarsystem.Planets.URANUS

	// Marshal to binary
	binary, err := planet.MarshalBinary()
	if err == nil {
		fmt.Println("Binary representation:", string(binary))
	}

	// Unmarshal from binary
	var unmarshaled solarsystem.Planet
	err = unmarshaled.UnmarshalBinary([]byte("Mercury"))
	if err == nil {
		fmt.Println("Unmarshaled:", unmarshaled.String())
		fmt.Println("Orbit days:", unmarshaled.OrbitDays)
	}

}
Output:

Binary representation: "Uranus"
Unmarshaled: Mercury
Orbit days: 88
Example (DatabaseIntegration)

Example_databaseIntegration demonstrates database Scanner/Valuer interfaces. This shows how enums can be stored and retrieved from databases.

package main

import (
	"fmt"

	"github.com/zarldev/goenums/examples/solarsystem"
)

func main() {
	planet := solarsystem.Planets.JUPITER

	// Value() method for storing in database
	value, err := planet.Value()
	if err == nil {
		fmt.Println("Database value:", value)
	}

	// Scan() method for reading from database
	var scanned solarsystem.Planet
	err = scanned.Scan("Saturn")
	if err == nil {
		fmt.Println("Scanned planet:", scanned.String())
		fmt.Println("Has rings:", scanned.Rings)
	}

}
Output:

Database value: Jupiter
Scanned planet: Saturn
Has rings: true
Example (EnumWithFields)

Example_enumWithFields demonstrates enums with custom fields. This shows how to access metadata associated with enum values.

package main

import (
	"fmt"

	"github.com/zarldev/goenums/examples/solarsystem"
)

func main() {
	// Using the Planet enum which has custom fields
	earth := solarsystem.Planets.EARTH

	fmt.Println("Planet:", earth.String())
	fmt.Println("Gravity:", earth.Gravity)
	fmt.Println("Radius (km):", earth.RadiusKm)
	fmt.Println("Mass (kg):", earth.MassKg)
	fmt.Println("Moons:", earth.Moons)
	fmt.Println("Has rings:", earth.Rings)

}
Output:

Planet: Earth
Gravity: 1
Radius (km): 6378.1
Mass (kg): 5.97e+24
Moons: 1
Has rings: false
Example (ExhaustiveHandling)

Example_exhaustiveHandling demonstrates exhaustive processing. This shows how to ensure all enum values are handled.

package main

import (
	"fmt"

	"github.com/zarldev/goenums/examples/solarsystem"
)

func main() {
	fmt.Println("Processing all planets:")

	// Use ExhaustivePlanets to ensure all values are processed
	solarsystem.ExhaustivePlanets(func(planet solarsystem.Planet) {
		category := "Rocky"
		if planet.Gravity > 1.5 {
			category = "Gas Giant"
		}
		fmt.Printf("%s: %s planet\n", planet.String(), category)
	})

}
Output:

Processing all planets:
Mercury: Rocky planet
Venus: Rocky planet
Earth: Rocky planet
Mars: Rocky planet
Jupiter: Gas Giant planet
Saturn: Rocky planet
Uranus: Rocky planet
Neptune: Rocky planet
Example (IteratorSupport)

Example_iteratorSupport demonstrates Go 1.23+ iterator support. This shows how to iterate over enum values using modern Go features.

package main

import (
	"fmt"

	"github.com/zarldev/goenums/examples/solarsystem"
)

func main() {
	fmt.Println("All planets:")

	// Iterate over all planets using the All() iterator
	for planet := range solarsystem.Planets.All() {
		fmt.Printf("- %s (Gravity: %.3f)\n", planet.String(), planet.Gravity)
	}

}
Output:

All planets:
- Mercury (Gravity: 0.378)
- Venus (Gravity: 0.907)
- Earth (Gravity: 1.000)
- Mars (Gravity: 0.377)
- Jupiter (Gravity: 2.360)
- Saturn (Gravity: 0.916)
- Uranus (Gravity: 0.889)
- Neptune (Gravity: 1.120)
Example (JsonMarshaling)

Example_jsonMarshaling demonstrates JSON marshaling and unmarshaling. This shows how generated enums integrate with Go's JSON package.

package main

import (
	"encoding/json"
	"fmt"

	"github.com/zarldev/goenums/examples/solarsystem"
)

func main() {
	// Create a struct with enum field
	type SpaceMission struct {
		Name        string             `json:"name"`
		Destination solarsystem.Planet `json:"destination"`
	}

	// Marshal to JSON
	mission := SpaceMission{
		Name:        "Mars Rover",
		Destination: solarsystem.Planets.MARS,
	}

	jsonData, err := json.Marshal(mission)
	if err != nil {
		fmt.Println("failed to marshal:", err)
		return
	}
	fmt.Println("JSON:", string(jsonData))

	// Unmarshal from JSON
	var parsed SpaceMission
	err = json.Unmarshal(jsonData, &parsed)
	if err != nil {
		fmt.Println("failed to unmarshal:", err)
		return
	}
	fmt.Println("Parsed mission:", parsed.Name, "to", parsed.Destination.String())

}
Output:

JSON: {"name":"Mars Rover","destination":"Mars"}
Parsed mission: Mars Rover to Mars
Example (NumericParsing)

Example_numericParsing demonstrates parsing enums from numeric values. This shows how enums can be created from their underlying numeric representation.

package main

import (
	"fmt"

	"github.com/zarldev/goenums/examples/solarsystem"
)

func main() {
	// Parse from various numeric types
	planet1, err := solarsystem.ParsePlanet(3) // Earth (index 3)
	if err == nil {
		fmt.Println("From int:", planet1.String())
	}

	planet2, err := solarsystem.ParsePlanet(4.0) // Mars (index 4)
	if err == nil {
		fmt.Println("From float:", planet2.String())
	}

	// Invalid index - this returns invalidPlanet, not an error
	invalidPlanet, err := solarsystem.ParsePlanet(99)
	if err == nil && !invalidPlanet.IsValid() {
		fmt.Println("Invalid index produces error")
	}

}
Output:

From int: Earth
From float: Mars
Invalid index produces error
Example (TextMarshaling)

Example_textMarshaling demonstrates text marshaling and unmarshaling. This shows how enums work with text-based formats.

package main

import (
	"fmt"

	"github.com/zarldev/goenums/examples/solarsystem"
)

func main() {
	planet := solarsystem.Planets.VENUS

	// Marshal to text
	text, err := planet.MarshalText()
	if err == nil {
		fmt.Println("Text representation:", string(text))
	}

	// Unmarshal from text
	var unmarshaled solarsystem.Planet
	err = unmarshaled.UnmarshalText([]byte("Neptune"))
	if err == nil {
		fmt.Println("Unmarshaled:", unmarshaled.String())
		fmt.Println("Surface pressure:", unmarshaled.SurfacePressureBars, "bars")
	}

}
Output:

Text representation: "Venus"
Unmarshaled: Neptune
Surface pressure: 1.5 bars

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL