package sessionbroker import ( "fmt" sessioncontracts "github.com/example/remote-access-platform/backend/pkg/contracts/session" ) var allowedTransitions = map[sessioncontracts.State]map[sessioncontracts.State]struct{}{ sessioncontracts.StateStarting: { sessioncontracts.StateActive: {}, sessioncontracts.StateFailed: {}, sessioncontracts.StateTerminated: {}, }, sessioncontracts.StateActive: { sessioncontracts.StateDetached: {}, sessioncontracts.StateReconnecting: {}, sessioncontracts.StateFailed: {}, sessioncontracts.StateTerminated: {}, }, sessioncontracts.StateDetached: { sessioncontracts.StateReconnecting: {}, sessioncontracts.StateTerminated: {}, sessioncontracts.StateFailed: {}, }, sessioncontracts.StateReconnecting: { sessioncontracts.StateActive: {}, sessioncontracts.StateDetached: {}, sessioncontracts.StateFailed: {}, sessioncontracts.StateTerminated: {}, }, } func validateTransition(from, to sessioncontracts.State) error { if from == to { return nil } if allowed, ok := allowedTransitions[from]; ok { if _, ok := allowed[to]; ok { return nil } } return fmt.Errorf("invalid session state transition: %s -> %s", from, to) }