Documentation
¶
Overview ¶
Package dependency provides a checker for validating package dependencies. It verifies that required dependencies exist, are enabled, and satisfy version constraints.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Checker ¶
type Checker struct {
// contains filtered or unexported fields
}
Checker validates package dependencies against version constraints and enabled state. It checks that all required dependencies:
- Exist (not nil from Getter)
- Are enabled (IsEnabled() returns true)
- Satisfy version constraints
Optional dependencies are skipped if missing but still validated if present.
func NewChecker ¶
func NewChecker(getter Getter, dependencies map[string]Dependency) *Checker
NewChecker creates a new dependency checker.
Parameters:
- getter: Interface to retrieve dependency information by name
- dependencies: Map of package names to their version constraints and optional flags
Example:
dependencies := map[string]Dependency{
"database": {
Constraint: semver.MustParseConstraint(">=1.0.0"),
Optional: false,
},
"cache": {
Constraint: semver.MustParseConstraint(">=2.0.0"),
Optional: true, // Package can work without cache
},
}
checker := NewChecker(getter, dependencies)
func (*Checker) Check ¶
Check evaluates all dependencies and returns whether the package should be enabled.
Validation logic:
- For each dependency in the map: a. Retrieve dependency node via Getter b. If not found: - Optional dependency: skip to next - Required dependency: return disabled with reason c. If found but disabled: - Return disabled (even for optional deps if present) d. Validate version constraint: - If version doesn't satisfy constraint: return disabled
- If all checks pass: return enabled
Returns:
- Result{Enabled: false, Reason: "..."} if any required dependency fails validation
- Result{Enabled: true} if all dependencies satisfy constraints
Note: Optional dependencies are only skipped if completely missing. If an optional dependency exists, it must still be enabled and satisfy version constraints.
type Dependency ¶
type Dependency struct {
// Constraint specifies the required version range (e.g., ">=1.21, <2.0").
// Uses semantic versioning constraints from github.com/Masterminds/semver/v3.
Constraint *semver.Constraints
// Optional indicates whether this dependency is optional.
// If true, missing or disabled dependency will not prevent package enablement.
// If false, dependency must exist, be enabled, and satisfy version constraint.
Optional bool
}
Dependency defines a version constraint requirement for a package dependency.
type Getter ¶
type Getter interface {
// IsEnabled checks if the module enabled, returning nil means module does not exist
IsEnabled(name string) *bool
}
Getter retrieves dependency information by name. Implementations should return nil if the dependency doesn't exist.
Example implementation:
func (s *Scheduler) GetDependency(name string) Node {
s.mu.Lock()
defer s.mu.Unlock()
return s.nodes[name]
}