// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file

package main

import (
	"context"
	"flag"
	"log"

	"github.com/google/subcommands"
)

type AddDiagnosticsCommand struct{}

func (*AddDiagnosticsCommand) Name() string {
	return "add_diagnostics"
}

func (*AddDiagnosticsCommand) Usage() string {
	return "add_diagnostics"
}

func (*AddDiagnosticsCommand) Synopsis() string {
	return "Adds diagnostics to a HistogramSet"
}

func (*AddDiagnosticsCommand) SetFlags(flags *flag.FlagSet) {}

func (*AddDiagnosticsCommand) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus {
	log.Println("Unimplemented: AddDiagnostics")
	return subcommands.ExitFailure
}
