63 lines
1.2 KiB
Go
63 lines
1.2 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
type CreateOptions struct {
|
|
Name string
|
|
OutputDir string
|
|
Force bool
|
|
}
|
|
|
|
func NewCreateOptions() *CreateOptions {
|
|
return &CreateOptions{}
|
|
}
|
|
|
|
type CreateImpl struct {
|
|
*GlobalImpl
|
|
*CreateOptions
|
|
}
|
|
|
|
func NewCreateImpl(g *GlobalImpl, o *CreateOptions) *CreateImpl {
|
|
return &CreateImpl{
|
|
GlobalImpl: g,
|
|
CreateOptions: o,
|
|
}
|
|
}
|
|
|
|
func (c *CreateImpl) Name() string {
|
|
return c.CreateOptions.Name
|
|
}
|
|
|
|
func (c *CreateImpl) OutputDir() string {
|
|
if c.CreateOptions.OutputDir != "" {
|
|
return c.CreateOptions.OutputDir
|
|
}
|
|
if c.CreateOptions.Name != "" {
|
|
return c.CreateOptions.Name
|
|
}
|
|
return "."
|
|
}
|
|
|
|
func (c *CreateImpl) Force() bool {
|
|
return c.CreateOptions.Force
|
|
}
|
|
|
|
func (c *CreateImpl) ValidateConfig() error {
|
|
name := c.CreateOptions.Name
|
|
if name != "" {
|
|
if strings.ContainsAny(name, "/\\") {
|
|
return fmt.Errorf("invalid project name %q: must not contain path separators", name)
|
|
}
|
|
if name == ".." || name == "." {
|
|
return fmt.Errorf("invalid project name %q", name)
|
|
}
|
|
if strings.TrimSpace(name) == "" {
|
|
return fmt.Errorf("project name must not be empty or whitespace only")
|
|
}
|
|
}
|
|
return c.GlobalImpl.ValidateConfig()
|
|
}
|