unit

package
v2.29.0 Latest Latest
Warning

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

Go to latest
Published: Dec 2, 2025 License: AGPL-3.0 Imports: 8 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrUnitIDRequired           = xerrors.New("unit name is required")
	ErrUnitNotFound             = xerrors.New("unit not found")
	ErrUnitAlreadyRegistered    = xerrors.New("unit already registered")
	ErrCannotUpdateOtherUnit    = xerrors.New("cannot update other unit's status")
	ErrDependenciesNotSatisfied = xerrors.New("unit dependencies not satisfied")
	ErrSameStatusAlreadySet     = xerrors.New("same status already set")
	ErrCycleDetected            = xerrors.New("cycle detected")
	ErrFailedToAddDependency    = xerrors.New("failed to add dependency")
)

Functions

This section is empty.

Types

type Dependency added in v2.29.0

type Dependency struct {
	Unit           ID
	DependsOn      ID
	RequiredStatus Status
	CurrentStatus  Status
	IsSatisfied    bool
}

Dependency represents a dependency relationship between units.

type Edge

type Edge[EdgeType, VertexType comparable] struct {
	From VertexType
	To   VertexType
	Edge EdgeType
}

Edge is a convenience type for representing an edge in the graph. It encapsulates the from and to vertices and the edge type itself.

type Graph

type Graph[EdgeType, VertexType comparable] struct {
	// contains filtered or unexported fields
}

Graph provides a bidirectional interface over gonum's directed graph implementation. While the underlying gonum graph is directed, we overlay bidirectional semantics by distinguishing between forward and reverse edges. Wanting and being wanted by other units are related but different concepts that have different graph traversal implications when Units update their status.

The graph stores edge types to represent different relationships between units, allowing for domain-specific semantics beyond simple connectivity.

func (*Graph[EdgeType, VertexType]) AddEdge

func (g *Graph[EdgeType, VertexType]) AddEdge(from, to VertexType, edge EdgeType) error

AddEdge adds an edge to the graph. It initializes the graph and metadata on first use, checks for cycles, and adds the edge to the gonum graph.

func (*Graph[EdgeType, VertexType]) GetForwardAdjacentVertices

func (g *Graph[EdgeType, VertexType]) GetForwardAdjacentVertices(from VertexType) []Edge[EdgeType, VertexType]

GetForwardAdjacentVertices returns all the edges that originate from the given vertex.

func (*Graph[EdgeType, VertexType]) GetReverseAdjacentVertices

func (g *Graph[EdgeType, VertexType]) GetReverseAdjacentVertices(to VertexType) []Edge[EdgeType, VertexType]

GetReverseAdjacentVertices returns all the edges that terminate at the given vertex.

func (*Graph[EdgeType, VertexType]) ToDOT

func (g *Graph[EdgeType, VertexType]) ToDOT(name string) (string, error)

ToDOT exports the graph to DOT format for visualization

type ID added in v2.29.0

type ID string

ID provides a type narrowed representation of the unique identifier of a unit.

type Manager added in v2.29.0

type Manager struct {
	// contains filtered or unexported fields
}

Manager provides reactive dependency tracking over a Graph. It manages Unit registration, dependency relationships, and status updates with automatic recalculation of readiness when dependencies are satisfied.

func NewManager added in v2.29.0

func NewManager() *Manager

NewManager creates a new Manager instance.

func (*Manager) AddDependency added in v2.29.0

func (m *Manager) AddDependency(unit ID, dependsOn ID, requiredStatus Status) error

AddDependency adds a dependency relationship between units. The unit depends on the dependsOn unit reaching the requiredStatus.

func (*Manager) ExportDOT added in v2.29.0

func (m *Manager) ExportDOT(name string) (string, error)

ExportDOT exports the dependency graph to DOT format for visualization.

func (*Manager) GetAllDependencies added in v2.29.0

func (m *Manager) GetAllDependencies(unit ID) ([]Dependency, error)

GetAllDependencies returns all dependencies for a unit, both satisfied and unsatisfied.

func (*Manager) GetGraph added in v2.29.0

func (m *Manager) GetGraph() *Graph[Status, ID]

GetGraph returns the underlying graph for visualization and debugging. This should be used carefully as it exposes the internal graph structure.

func (*Manager) GetUnmetDependencies added in v2.29.0

func (m *Manager) GetUnmetDependencies(unit ID) ([]Dependency, error)

GetUnmetDependencies returns a list of unsatisfied dependencies for a unit.

func (*Manager) IsReady added in v2.29.0

func (m *Manager) IsReady(id ID) (bool, error)

func (*Manager) Register added in v2.29.0

func (m *Manager) Register(id ID) error

Register adds a unit to the manager if it is not already registered. If a Unit is already registered (per the ID field), it is not updated.

func (*Manager) Unit added in v2.29.0

func (m *Manager) Unit(id ID) (Unit, error)

Unit fetches a unit from the manager. If the unit does not exist, it returns the Unit zero-value as a placeholder unit, because units may depend on other units that have not yet been created.

func (*Manager) UpdateStatus added in v2.29.0

func (m *Manager) UpdateStatus(unit ID, newStatus Status) error

UpdateStatus updates a unit's status and recalculates readiness for affected dependents.

type Status added in v2.29.0

type Status string

Status represents the status of a unit.

const (
	StatusNotRegistered Status = ""
	StatusPending       Status = "pending"
	StatusStarted       Status = "started"
	StatusComplete      Status = "completed"
)

Status constants for dependency tracking.

func (Status) String added in v2.29.0

func (s Status) String() string

type Unit added in v2.29.0

type Unit struct {
	// contains filtered or unexported fields
}

Unit represents a point-in-time snapshot of a vertex in the dependency graph. Units may depend on other units, or be depended on by other units. The unit struct is not aware of updates made to the dependency graph after it is initialized and should not be cached.

func (Unit) ID added in v2.29.0

func (u Unit) ID() ID

func (Unit) Status added in v2.29.0

func (u Unit) Status() Status

Jump to

Keyboard shortcuts

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