// 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 UploadCommand struct{}

func (*UploadCommand) Name() string {
	return "upload"
}

func (*UploadCommand) Usage() string {
	return "upload"
}

func (*UploadCommand) Synopsis() string {
	return "Uploads data to catapult"
}

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

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