talos/internal/pkg/runtime/runtime.go
Andrey Smirnov d3d011c8d2 chore: replace /* */ comments with // comments in license header
This fixes issues with `// +build` directives not being recognized in
source files.

Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
2019-10-25 14:15:17 -07:00

76 lines
1.6 KiB
Go

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package runtime
import (
"fmt"
"strings"
)
// Mode is a runtime mode.
type Mode int
const (
// Cloud represents a runtime mode.
Cloud Mode = iota
// Container represents a runtime mode.
Container
// Interactive represents a runtime mode.
Interactive
// Metal represents a runtime mode.
Metal
)
// String returns the string representation of a Mode.
func (m Mode) String() string {
return [...]string{"Cloud", "Container", "Interactive", "Metal"}[m]
}
// ModeFromString returns a runtime mode that matches the given string.
func ModeFromString(s string) (m Mode, err error) {
switch strings.Title(s) {
case "Cloud":
return Cloud, nil
case "Container":
return Container, nil
case "Interactive":
return Interactive, nil
case "Metal":
return Metal, nil
default:
return m, fmt.Errorf("%q is not a valid mode", s)
}
}
// Runtime defines the runtime parameters.
type Runtime interface {
Platform() Platform
Config() Configurator
}
// NewRuntime initializes and returns the runtime interface.
func NewRuntime(p Platform, c Configurator) Runtime {
return &DefaultRuntime{
p: p,
c: c,
}
}
// DefaultRuntime implements the Runtime interface.
type DefaultRuntime struct {
p Platform
c Configurator
}
// Platform implements the Runtime interface.
func (d *DefaultRuntime) Platform() Platform {
return d.p
}
// Config implements the Runtime interface.
func (d *DefaultRuntime) Config() Configurator {
return d.c
}