package domain import ( "errors" "git.cin.su/m/Assistant/contracts/capability" ) var ErrInvalidHealth = errors.New("invalid capability health") var ErrUnsupportedHealthVersion = errors.New("unsupported capability health semantic version") func ValidateHealth(health capability.Health) error { if health.CapabilityID == "" || health.Revision < 1 { return ErrInvalidHealth } switch health.SemanticVersion { case capability.HealthV1: if health.ObservedAtUnixMillis != nil { return ErrInvalidHealth } case capability.HealthV2: if health.ObservedAtUnixMillis == nil || *health.ObservedAtUnixMillis < 1 { return ErrInvalidHealth } default: return ErrUnsupportedHealthVersion } switch health.State { case capability.HealthAvailable: if health.Reason != capability.ReasonNone { return ErrInvalidHealth } case capability.HealthDegraded, capability.HealthUnavailable: if health.Reason == capability.ReasonNone || health.Reason == "" { return ErrInvalidHealth } default: return ErrInvalidHealth } return nil }