71 lines
1.3 KiB
Go
71 lines
1.3 KiB
Go
package cli
|
||
|
||
import (
|
||
"flag"
|
||
"fmt"
|
||
"io"
|
||
"os"
|
||
"strings"
|
||
|
||
"gitea.pglikers.com/tools/slacksend/internal/version"
|
||
)
|
||
|
||
type Options struct {
|
||
ShowVersion bool
|
||
}
|
||
|
||
func Run(args []string) int {
|
||
return run(args, os.Stdin, os.Stdout, os.Stderr)
|
||
}
|
||
|
||
func run(args []string, stdin io.Reader, stdout, stderr io.Writer) int {
|
||
fs := flag.NewFlagSet("slacksend", flag.ContinueOnError)
|
||
fs.SetOutput(stderr)
|
||
fs.Usage = func() { Usage(stdout) }
|
||
|
||
var opt Options
|
||
fs.BoolVar(&opt.ShowVersion, "version", false, "show version")
|
||
fs.BoolVar(&opt.ShowVersion, "V", false, "show version (short)")
|
||
|
||
if err := fs.Parse(args[1:]); err != nil {
|
||
if err == flag.ErrHelp {
|
||
Usage(stdout)
|
||
return 0
|
||
}
|
||
fmt.Fprintln(stderr, err)
|
||
Usage(stderr)
|
||
return 2
|
||
}
|
||
|
||
if opt.ShowVersion {
|
||
fmt.Fprintln(stdout, version.String())
|
||
return 0
|
||
}
|
||
|
||
msg, err := message(fs.Args(), stdin)
|
||
if err != nil {
|
||
fmt.Fprintln(stderr, "read message error:", err)
|
||
return 1
|
||
}
|
||
if msg == "" {
|
||
Usage(stderr)
|
||
return 2
|
||
}
|
||
|
||
// TODO: Slack送信(ここはあとで internal/slack に逃がす)
|
||
fmt.Fprintln(stdout, msg)
|
||
return 0
|
||
}
|
||
|
||
func message(args []string, stdin io.Reader) (string, error) {
|
||
if len(args) > 0 {
|
||
return strings.Join(args, " "), nil
|
||
}
|
||
b, err := io.ReadAll(stdin)
|
||
if err != nil {
|
||
return "", err
|
||
}
|
||
return strings.TrimSpace(string(b)), nil
|
||
}
|
||
|