diff --git a/internal/commands/projects/create.go b/internal/commands/projects/create.go index 9a3b618d..9b9a2be0 100644 --- a/internal/commands/projects/create.go +++ b/internal/commands/projects/create.go @@ -119,7 +119,7 @@ func createRun(opts *CreateOpts) error { } // Display the created project - d := newDisplayer(format.Pretty, true, resp.Payload.Project) + d := format.NewDisplayer(resp.Payload.Project, format.Pretty, projectFields) if err := opts.Output.Display(d); err != nil { return err } diff --git a/internal/commands/projects/displayer.go b/internal/commands/projects/displayer.go deleted file mode 100644 index 6a312313..00000000 --- a/internal/commands/projects/displayer.go +++ /dev/null @@ -1,57 +0,0 @@ -package projects - -import ( - "github.com/hashicorp/hcp-sdk-go/clients/cloud-resource-manager/stable/2019-12-10/models" - "github.com/hashicorp/hcp/internal/pkg/format" -) - -type displayer struct { - projects []*models.HashicorpCloudResourcemanagerProject - defaultFormat format.Format - single bool -} - -func newDisplayer(defaultFormat format.Format, single bool, projects ...*models.HashicorpCloudResourcemanagerProject) *displayer { - return &displayer{ - projects: projects, - defaultFormat: defaultFormat, - single: single, - } -} - -func (d *displayer) DefaultFormat() format.Format { - return d.defaultFormat -} - -func (d *displayer) Payload() any { - if d.single { - if len(d.projects) != 1 { - return nil - } - - return d.projects[0] - } - - return d.projects -} - -func (d *displayer) FieldTemplates() []format.Field { - return []format.Field{ - { - Name: "Name", - ValueFormat: "{{ .Name }}", - }, - { - Name: "ID", - ValueFormat: "{{ .ID }}", - }, - { - Name: "Description", - ValueFormat: "{{ .Description }}", - }, - { - Name: "Created At", - ValueFormat: "{{ .CreatedAt }}", - }, - } -} diff --git a/internal/commands/projects/list.go b/internal/commands/projects/list.go index 5d9d3a8e..048c9791 100644 --- a/internal/commands/projects/list.go +++ b/internal/commands/projects/list.go @@ -70,6 +70,6 @@ func listRun(opts *ListOpts) error { req.PaginationNextPageToken = &next } - d := newDisplayer(format.Table, false, projects...) + d := format.NewDisplayer(projects, format.Table, projectFields) return opts.Output.Display(d) } diff --git a/internal/commands/projects/projects.go b/internal/commands/projects/projects.go index 07771a4b..934e06c7 100644 --- a/internal/commands/projects/projects.go +++ b/internal/commands/projects/projects.go @@ -3,9 +3,20 @@ package projects import ( "github.com/hashicorp/hcp/internal/commands/projects/iam" "github.com/hashicorp/hcp/internal/pkg/cmd" + "github.com/hashicorp/hcp/internal/pkg/format" "github.com/hashicorp/hcp/internal/pkg/heredoc" ) +var ( + // projectFields is the set of fields to display for a project. + projectFields = []format.Field{ + format.NewField("Name", "{{ .Name }}"), + format.NewField("ID", "{{ .ID }}"), + format.NewField("Description", "{{ .Description }}"), + format.NewField("Created At", "{{ .CreatedAt }}"), + } +) + func NewCmdProjects(ctx *cmd.Context) *cmd.Command { cmd := &cmd.Command{ Name: "projects", diff --git a/internal/commands/projects/read.go b/internal/commands/projects/read.go index 1f812f0d..97a3149e 100644 --- a/internal/commands/projects/read.go +++ b/internal/commands/projects/read.go @@ -26,7 +26,7 @@ func NewCmdRead(ctx *cmd.Context, runF func(*ReadOpts) error) *cmd.Command { LongHelp: "Show metadata for the project.", Examples: []cmd.Example{ { - Preamble: "Read a project:", + Preamble: "Read a project.", Command: "$ hcp projects read --project=cd3d34d5-ceeb-493d-b004-9297365a01af", }, }, @@ -61,6 +61,6 @@ func readRun(opts *ReadOpts) error { return fmt.Errorf("failed to read project: %w", err) } - d := newDisplayer(format.Pretty, true, resp.Payload.Project) + d := format.NewDisplayer(resp.Payload.Project, format.Pretty, projectFields) return opts.Output.Display(d) }