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 uint16Value uint16
13
14func (i *uint16Value) Set(value string, opt Option) error {
15	v, err := strconv.ParseUint(value, 0, 16)
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 = uint16Value(v)
28	return nil
29}
30
31func (i *uint16Value) String() string {
32	return strconv.FormatUint(uint64(*i), 10)
33}
34
35// Uint16 creates an option that parses its value as an uint16.
36func Uint16(name rune, value uint16, helpvalue ...string) *uint16 {
37	return CommandLine.Uint16(name, value, helpvalue...)
38}
39
40func (s *Set) Uint16(name rune, value uint16, helpvalue ...string) *uint16 {
41	return s.Uint16Long("", name, value, helpvalue...)
42}
43
44func Uint16Long(name string, short rune, value uint16, helpvalue ...string) *uint16 {
45	return CommandLine.Uint16Long(name, short, value, helpvalue...)
46}
47
48func (s *Set) Uint16Long(name string, short rune, value uint16, helpvalue ...string) *uint16 {
49	s.Uint16VarLong(&value, name, short, helpvalue...)
50	return &value
51}
52
53func Uint16Var(p *uint16, name rune, helpvalue ...string) Option {
54	return CommandLine.Uint16Var(p, name, helpvalue...)
55}
56
57func (s *Set) Uint16Var(p *uint16, name rune, helpvalue ...string) Option {
58	return s.Uint16VarLong(p, "", name, helpvalue...)
59}
60
61func Uint16VarLong(p *uint16, name string, short rune, helpvalue ...string) Option {
62	return CommandLine.Uint16VarLong(p, name, short, helpvalue...)
63}
64
65func (s *Set) Uint16VarLong(p *uint16, name string, short rune, helpvalue ...string) Option {
66	return s.VarLong((*uint16Value)(p), name, short, helpvalue...)
67}
68