diff options
author | Runxi Yu <me@runxiyu.org> | 2025-04-06 10:07:12 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-04-06 10:07:12 +0800 |
commit | 1ab2843f5542024fcbdaa23341ff723f88be7721 (patch) | |
tree | b17cc75bd8ed93d0fe15efe9d56a61b8d1709420 | |
parent | irc: Move everything from lindenii-irc (diff) | |
download | forge-1ab2843f5542024fcbdaa23341ff723f88be7721.tar.gz forge-1ab2843f5542024fcbdaa23341ff723f88be7721.tar.zst forge-1ab2843f5542024fcbdaa23341ff723f88be7721.zip |
Don't use humanize as a dependency
-rw-r--r-- | forged/internal/humanize/bytes.go | 35 | ||||
-rw-r--r-- | go.mod | 1 |
2 files changed, 35 insertions, 1 deletions
diff --git a/forged/internal/humanize/bytes.go b/forged/internal/humanize/bytes.go new file mode 100644 index 0000000..bea504c --- /dev/null +++ b/forged/internal/humanize/bytes.go @@ -0,0 +1,35 @@ +// SPDX-FileCopyrightText: Copyright (c) 2005-2008 Dustin Sallings <dustin@spy.net> +// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org> + +// Package humanize provides functions to convert numbers into human-readable formats. +package humanize + +import ( + "fmt" + "math" +) + +// IBytes produces a human readable representation of an IEC size. +func IBytes(s uint64) string { + sizes := []string{"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB"} + return humanateBytes(s, 1024, sizes) +} + +func humanateBytes(s uint64, base float64, sizes []string) string { + if s < 10 { + return fmt.Sprintf("%d B", s) + } + e := math.Floor(logn(float64(s), base)) + suffix := sizes[int(e)] + val := math.Floor(float64(s)/math.Pow(base, e)*10+0.5) / 10 + f := "%.0f %s" + if val < 10 { + f = "%.1f %s" + } + + return fmt.Sprintf(f, val, suffix) +} + +func logn(n, b float64) float64 { + return math.Log(n) / math.Log(b) +} @@ -7,7 +7,6 @@ require ( github.com/alecthomas/chroma/v2 v2.16.0 github.com/alexedwards/argon2id v1.0.0 github.com/bluekeyes/go-gitdiff v0.8.1 - github.com/dustin/go-humanize v1.0.1 github.com/emersion/go-message v0.18.2 github.com/emersion/go-smtp v0.21.3 github.com/gliderlabs/ssh v0.3.8 |