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