You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: output.go
    path of file: ./repos/terraform/internal/command/arguments
    
    the code of the file until where you have to start completion: // Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1

package arguments

import (
	"github.com/hashicorp/terraform/internal/tfdiags"
)

// Output represents the command-line arguments for the output command.
type Output struct {
	// Name identifies which root module output to show.  If empty, show all
	// outputs.
	Name string

	// StatePath is an optional path to a state file, from which outputs will
	// be loaded.
	StatePath string

	// ViewType specifies which output format to use: human, JSON, or "raw".
	Vi
    
func ParseOutput(args []string) (*Output, tfdiags.Diagnostics) {
	var diags tfdiags.Diagnostics
	output := &Output{}

	var jsonOutput, rawOutput bool
	var statePath string
	cmdFlags := defaultFlagSet("output")
	cmdFlags.BoolVar(&jsonOutput, "json", false, "json")
	cmdFlags.BoolVar(&rawOutput, "raw", false, "raw")
	cmdFlags.StringVar(&statePath, "state", "", "path")

	if err := cmdFlags.Parse(args); err != nil {
		diags = diags.Append(tfdiags.Sourceless(
			tfdiags.Error,
			"Failed to parse command-line flags",
			err.Error(),
		))
	}

	args = cmdFlags.Args()
	if len(args) > 1 {
		diags = diags.Append(tfdiags.Sourceless(
			tfdiags.Error,
			"Unexpected argument",
			"The output command expects exactly one argument with the name of an output variable or no arguments to show all outputs.",
		))
	}

	if jsonOutput && rawOutput {
		diags = diags.Append(tfdiags.Sourceless(
			tfdiags.Error,
			"Invalid output format",
			"The -raw and -json options are mutually-exclusive.",
		))

		// Since the desired output format is unknowable, fall back to default
		jsonOutput = false
		rawOutput = false
	}

	output.StatePath = statePath

	if len(args) > 0 {
		output.Name = args[0]
	}

	if rawOutput && output.Name == "" {
		diags = diags.Append(tfdiags.Sourceless(
			tfdiags.Error,
			"Output name required",
			"You must give the name of a single output value when using the -raw option.",
		))
	}

	switch {
	case jsonOutput:
		output.ViewType = ViewJSON
	case rawOutput:
		output.ViewType = ViewRaw
	default:
		output.ViewType = ViewHuman
	}

	return output, diags
}