chore(repo): reinitialize repository

This commit is contained in:
2026-03-18 11:29:54 +08:00
commit 24871e213a
288 changed files with 44369 additions and 0 deletions
+51
View File
@@ -0,0 +1,51 @@
package idgen
import (
"crypto/rand"
"encoding/hex"
"fmt"
"io"
"inbox/internal/base/slug"
"inbox/internal/base/timeutil"
)
type Generator struct {
Clock timeutil.Clock
Random io.Reader
SuffixSize int
}
func NewGenerator(clock timeutil.Clock, random io.Reader) Generator {
if clock == nil {
clock = timeutil.SystemClock{}
}
if random == nil {
random = rand.Reader
}
return Generator{
Clock: clock,
Random: random,
SuffixSize: 6,
}
}
func (g Generator) New(kind string) (string, error) {
prefix := slug.NormalizeWithLimit(kind, 24)
if prefix == "" {
prefix = "id"
}
size := g.SuffixSize
if size <= 0 {
size = 6
}
buf := make([]byte, size)
if _, err := io.ReadFull(g.Random, buf); err != nil {
return "", fmt.Errorf("generate id suffix: %w", err)
}
return fmt.Sprintf("%s-%s-%s", prefix, timeutil.TimestampIDPart(g.Clock.Now()), hex.EncodeToString(buf)), nil
}
func New(kind string) (string, error) {
return NewGenerator(timeutil.SystemClock{}, rand.Reader).New(kind)
}
+23
View File
@@ -0,0 +1,23 @@
package idgen
import (
"bytes"
"testing"
"time"
"inbox/internal/base/timeutil"
)
func TestGeneratorNew(t *testing.T) {
gen := NewGenerator(
timeutil.FixedClock{Time: time.Date(2026, 3, 13, 10, 11, 12, 0, time.UTC)},
bytes.NewReader([]byte{0, 1, 2, 3, 4, 5}),
)
got, err := gen.New("Role Prompt")
if err != nil {
t.Fatalf("New() error = %v", err)
}
if got != "role-prompt-20260313T101112Z-000102030405" {
t.Fatalf("New() = %q", got)
}
}