1// Copyright 2013 Google Inc.  All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package getopt
6
7import (
8	"fmt"
9	"strconv"
10)
11
12type int32Value int32
13
14func (i *int32Value) Set(value string, opt Option) error {
15	v, err := strconv.ParseInt(value, 0, 32)
16	if err != nil {
17		if e, ok := err.(*strconv.NumError); ok {
18			switch e.Err {
19			case strconv.ErrRange:
20				err = fmt.Errorf("value out of range: %s", value)
21			case strconv.ErrSyntax:
22				err = fmt.Errorf("not a valid number: %s", value)
23			}
24		}
25		return err
26	}
27	*i = int32Value(v)
28	return nil
29}
30
31func (i *int32Value) String() string {
32	return strconv.FormatInt(int64(*i), 10)
33}
34
35// Int32 creates an option that parses its value as an int32.
36func Int32(name rune, value int32, helpvalue ...string) *int32 {
37	return CommandLine.Int32(name, value, helpvalue...)
38}
39
40func (s *Set) Int32(name rune, value int32, helpvalue ...string) *int32 {
41	return s.Int32Long("", name, value, helpvalue...)
42}
43
44func Int32Long(name string, short rune, value int32, helpvalue ...string) *int32 {
45	return CommandLine.Int32Long(name, short, value, helpvalue...)
46}
47
48func (s *Set) Int32Long(name string, short rune, value int32, helpvalue ...string) *int32 {
49	s.Int32VarLong(&value, name, short, helpvalue...)
50	return &value
51}
52
53func Int32Var(p *int32, name rune, helpvalue ...string) Option {
54	return CommandLine.Int32Var(p, name, helpvalue...)
55}
56
57func (s *Set) Int32Var(p *int32, name rune, helpvalue ...string) Option {
58	return s.Int32VarLong(p, "", name, helpvalue...)
59}
60
61func Int32VarLong(p *int32, name string, short rune, helpvalue ...string) Option {
62	return CommandLine.Int32VarLong(p, name, short, helpvalue...)
63}
64
65func (s *Set) Int32VarLong(p *int32, name string, short rune, helpvalue ...string) Option {
66	return s.VarLong((*int32Value)(p), name, short, helpvalue...)
67}
68