blob: 4b2ff3666de638a11db21fa5f3ad72123acfcf2e [file] [log] [blame]
// Copyright 2016 The Chromium 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 (
"fmt"
"os"
"strings"
)
// main_utils contains functions and type definitions that are used by the mojom
// tool commands and implement logic that is not specific to any one command.
// CommaSeparatedList holds the result of parsing a command-line flag that
// accepts a comma-separated list of strings. This type satisfies the flag.Value
// interface.
type CommaSeparatedList []string
func (l *CommaSeparatedList) String() string {
return fmt.Sprintf("%v", *l)
}
func (l *CommaSeparatedList) Set(args string) error {
for _, el := range strings.Split(args, ",") {
*l = append(*l, el)
}
return nil
}
// RepeatedStringArg holds the result of parsing a string command-line argument
// that can be repeated. This type satisfies the flag.Value interface.
type RepeatedStringArg []string
func (r *RepeatedStringArg) String() string {
return fmt.Sprintf("%v", *r)
}
func (r *RepeatedStringArg) Set(arg string) error {
*r = append(*r, arg)
return nil
}
// DirectoryList holds the result of parsing a command-line flag
// that accepts a comma-separated list of directory paths. This
// type satisfies the flag.Value interface.
type DirectoryList []string
func (dl *DirectoryList) String() string {
return fmt.Sprintf("%v", *dl)
}
func (dl *DirectoryList) Set(args string) error {
for _, name := range strings.Split(args, ",") {
info, err := os.Stat(name)
if err != nil {
return err
}
if !info.IsDir() {
return fmt.Errorf("%s is not a directory.", name)
}
*dl = append(*dl, name)
}
return nil
}