Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions configfile.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,18 @@ func (r *Reader) readInt(name string) (int, error) {
return i, nil
}

func (r *Reader) readInt64(name string) (int64, error) {
b, err := r.r.Read(name)
if err != nil {
return 0, err
}
i, err := strconv.ParseInt(string(b), 10, 64)
if err != nil {
return 0, err
}
return i, nil
}

func (r *Reader) readBool(name string) (bool, error) {
b, err := r.r.Read(name)
if err != nil {
Expand Down Expand Up @@ -144,6 +156,29 @@ func (r *Reader) MustInt(name string) int {
return i
}

// Int64Default reads int64 from config file with default value
func (r *Reader) Int64Default(name string, def int64) int64 {
i, err := r.readInt64(name)
if err != nil {
return def
}
return i
}

// Int64 reads int from config file
func (r *Reader) Int64(name string) int64 {
return r.Int64Default(name, 0)
}

// MustInt64 reads int64 from config file, panic if file not exists or data can not parse to int64
func (r *Reader) MustInt64(name string) int64 {
i, err := r.readInt64(name)
if err != nil {
panic(err)
}
return i
}

// BoolDefault reads bool from config file with default value,
// result is false if lower case data is "", "0", or "false", otherwise true
func (r *Reader) BoolDefault(name string, def bool) bool {
Expand Down
54 changes: 54 additions & 0 deletions configfile_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,15 @@ func testReader(t *testing.T, c *configfile.Reader) {
assert.Panics(t, func() { c.MustInt("notfound") })
})

t.Run("Int64", func(t *testing.T) {
t.Parallel()

assert.Equal(t, int64(0), c.Int64("notfound"))
assert.Equal(t, int64(0), c.Int64Default("notfound", 0))
assert.Equal(t, int64(1), c.Int64Default("notfound", 1))
assert.Panics(t, func() { c.MustInt64("notfound") })
})

t.Run("String", func(t *testing.T) {
t.Parallel()

Expand Down Expand Up @@ -70,6 +79,15 @@ func testReader(t *testing.T, c *configfile.Reader) {
assert.Panics(t, func() { c.MustInt("empty") })
})

t.Run("Int64", func(t *testing.T) {
t.Parallel()

assert.Equal(t, int64(0), c.Int64("empty"))
assert.Equal(t, int64(0), c.Int64Default("empty", 0))
assert.Equal(t, int64(1), c.Int64Default("empty", 1))
assert.Panics(t, func() { c.MustInt64("empty") })
})

t.Run("String", func(t *testing.T) {
t.Parallel()

Expand Down Expand Up @@ -111,6 +129,15 @@ func testReader(t *testing.T, c *configfile.Reader) {
assert.Panics(t, func() { c.MustInt("data1") })
})

t.Run("Int64", func(t *testing.T) {
t.Parallel()

assert.Equal(t, int64(0), c.Int64("data1"))
assert.Equal(t, int64(0), c.Int64Default("data1", 0))
assert.Equal(t, int64(1), c.Int64Default("data1", 1))
assert.Panics(t, func() { c.MustInt64("data1") })
})

t.Run("String", func(t *testing.T) {
t.Parallel()

Expand Down Expand Up @@ -152,6 +179,15 @@ func testReader(t *testing.T, c *configfile.Reader) {
assert.Panics(t, func() { c.MustInt("data2") })
})

t.Run("Int64", func(t *testing.T) {
t.Parallel()

assert.Equal(t, int64(0), c.Int64("data2"))
assert.Equal(t, int64(0), c.Int64Default("data2", 0))
assert.Equal(t, int64(1), c.Int64Default("data2", 1))
assert.Panics(t, func() { c.MustInt64("data2") })
})

t.Run("String", func(t *testing.T) {
t.Parallel()

Expand Down Expand Up @@ -193,6 +229,15 @@ func testReader(t *testing.T, c *configfile.Reader) {
assert.NotPanics(t, func() { c.MustInt("data3") })
})

t.Run("Int64", func(t *testing.T) {
t.Parallel()

assert.Equal(t, int64(9), c.Int64("data3"))
assert.Equal(t, int64(9), c.Int64Default("data3", 0))
assert.Equal(t, int64(9), c.Int64Default("data3", 1))
assert.NotPanics(t, func() { c.MustInt64("data3") })
})

t.Run("String", func(t *testing.T) {
t.Parallel()

Expand Down Expand Up @@ -234,6 +279,15 @@ func testReader(t *testing.T, c *configfile.Reader) {
assert.NotPanics(t, func() { c.MustInt("data4") })
})

t.Run("Int64", func(t *testing.T) {
t.Parallel()

assert.Equal(t, int64(0), c.Int64("data4"))
assert.Equal(t, int64(0), c.Int64Default("data4", 0))
assert.Equal(t, int64(0), c.Int64Default("data4", 1))
assert.NotPanics(t, func() { c.MustInt64("data4") })
})

t.Run("String", func(t *testing.T) {
t.Parallel()

Expand Down