Skip to content

Commit

Permalink
feat(validator): 添加针对文件的验证器
Browse files Browse the repository at this point in the history
  • Loading branch information
caixw committed Apr 18, 2024
1 parent 5279e26 commit e3bedfa
Show file tree
Hide file tree
Showing 4 changed files with 108 additions and 33 deletions.
22 changes: 11 additions & 11 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ go 1.22.0

require (
github.com/google/uuid v1.6.0
github.com/issue9/assert/v4 v4.1.1
github.com/issue9/assert/v4 v4.2.0
github.com/issue9/version v1.0.8
github.com/issue9/web v0.89.0
github.com/issue9/web v0.92.0
)

require (
Expand All @@ -16,18 +16,18 @@ require (
github.com/issue9/conv v1.3.5 // indirect
github.com/issue9/errwrap v0.3.2 // indirect
github.com/issue9/localeutil v0.26.5 // indirect
github.com/issue9/logs/v7 v7.5.1 // indirect
github.com/issue9/mux/v7 v7.4.2 // indirect
github.com/issue9/logs/v7 v7.6.0 // indirect
github.com/issue9/mux/v8 v8.1.0 // indirect
github.com/issue9/query/v3 v3.1.3 // indirect
github.com/issue9/scheduled v0.19.4 // indirect
github.com/issue9/sliceutil v0.16.0 // indirect
github.com/issue9/source v0.8.3 // indirect
github.com/issue9/term/v3 v3.2.7 // indirect
github.com/issue9/scheduled v0.19.5 // indirect
github.com/issue9/sliceutil v0.16.1 // indirect
github.com/issue9/source v0.9.1 // indirect
github.com/issue9/term/v3 v3.2.8 // indirect
github.com/jellydator/ttlcache/v3 v3.2.0 // indirect
github.com/klauspost/compress v1.17.7 // indirect
golang.org/x/mod v0.16.0 // indirect
github.com/klauspost/compress v1.17.8 // indirect
golang.org/x/mod v0.17.0 // indirect
golang.org/x/sync v0.1.0 // indirect
golang.org/x/sys v0.18.0 // indirect
golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
)
44 changes: 22 additions & 22 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/issue9/assert/v4 v4.1.1 h1:OhPE8SB8n/qZCNGLQa+6MQtr/B3oON0JAVj68k8jJlc=
github.com/issue9/assert/v4 v4.1.1/go.mod h1:v7qDRXi7AsaZZNh8eAK2rkLJg5/clztqQGA1DRv9Lv4=
github.com/issue9/assert/v4 v4.2.0 h1:XJGMFYW0xfESqFRPLWbSsr0xWdkofytvQbDfNb5n9fw=
github.com/issue9/assert/v4 v4.2.0/go.mod h1:v7qDRXi7AsaZZNh8eAK2rkLJg5/clztqQGA1DRv9Lv4=
github.com/issue9/cache v0.12.0 h1:NiDBuN9x22H4UJsOMDoEuIFA8r3qNqPqO9vyzzcvzoY=
github.com/issue9/cache v0.12.0/go.mod h1:0s9j7qiKv4uWYqz0D2N2H7bIBvmtD+903h5GqnxW6i4=
github.com/issue9/config v0.6.2 h1:znXvsk6gh0wm+fTEn0zUjjramKuOLY8Jt0ZTxp4GIkc=
Expand All @@ -16,44 +16,44 @@ github.com/issue9/errwrap v0.3.2 h1:7KEme9Pfe75M+sIMcPCn/DV90wjnOcRbO4DXVAHj3Fw=
github.com/issue9/errwrap v0.3.2/go.mod h1:KcCLuUGiffjooLCUjL89r1cyO8/HT/VRcQrneO53N3A=
github.com/issue9/localeutil v0.26.5 h1:e78b6cOOtgzfb4g4U9uPLC8QyK6Lux+s7ZiQe+6iM1A=
github.com/issue9/localeutil v0.26.5/go.mod h1:BJXJwcAT9CyyVZOlqfmq+B5FcPbqGxGjYnTYbVuiMM8=
github.com/issue9/logs/v7 v7.5.1 h1:H1ua+3C0Nm6LZt4gEFhKZiyHhzyYEkPVYJDtt+1jmvQ=
github.com/issue9/logs/v7 v7.5.1/go.mod h1:UA05C4wF8vrrQp13QV1ncNqI/6nJ8R1c/dpOOcbSKFQ=
github.com/issue9/mux/v7 v7.4.2 h1:BIuHX7g3RctaVlu4dCf6drrTT6GzToo0T3/d7dGCcOs=
github.com/issue9/mux/v7 v7.4.2/go.mod h1:NQ5vH/HD3QDil227u5DGT9PN9IP7j/Dx7+cSSEBgvhM=
github.com/issue9/logs/v7 v7.6.0 h1:dvY1ctPROdd2YaOwYRNOkfbmMx+8OM0w53t8bWrWg9s=
github.com/issue9/logs/v7 v7.6.0/go.mod h1:7Hx1vnAojUciyFdqNlMiwsBJRGBc/P2Yrjt7ACm9Uno=
github.com/issue9/mux/v8 v8.1.0 h1:NZmQv0iE0ocn1oyHWKZWY+PIVcbpZYdaDImJ3+WJ/28=
github.com/issue9/mux/v8 v8.1.0/go.mod h1:ivUHUcMzoTPxvjC33XrsWJ68fnw5vEjJ0y1GcuMrg84=
github.com/issue9/query/v3 v3.1.3 h1:Y6ETEYXxaKqhpM4lXPKCffhJ72VuKQbrAwgwHlacu0Y=
github.com/issue9/query/v3 v3.1.3/go.mod h1:a/W/+7iel9K+5rRT4AFAKR8+OJeV5axeF6tK9My4lNA=
github.com/issue9/rands/v3 v3.0.1 h1:EnX9WNushGgHCzoL/R5eBPaLfvjLO/c7CGHNgLK0JhY=
github.com/issue9/rands/v3 v3.0.1/go.mod h1:n4mM2ts7NCpuxHwS9zorPITJBWEUGksXg6cTOH6yqS0=
github.com/issue9/scheduled v0.19.4 h1:Wg9S7rOmMpn2O0F1OVb51o8FYGibdMjPkElgjEKcYK4=
github.com/issue9/scheduled v0.19.4/go.mod h1:S63DdPErP0aXsEnUzc27F+v0koMf+2V4V+CpY7tvr8o=
github.com/issue9/sliceutil v0.16.0 h1:+gyumWF126mprQLiUi14s6SAeucMg1vuyPEh66VTtC8=
github.com/issue9/sliceutil v0.16.0/go.mod h1:ldun6sT4/bOJxuMtOXhtc6P7GCwE7L+avV86HNks7qk=
github.com/issue9/source v0.8.3 h1:MH883uljg0fupE/qkqJm3RqA5/l40KR+HsR7Mp3zjYY=
github.com/issue9/source v0.8.3/go.mod h1:H0Joo5go08sIMODLvQXpWwiWpGrH2MiTMFhKBZhVbH8=
github.com/issue9/term/v3 v3.2.7 h1:esfhoinbQ65P3oFscXhticrDFOgZJQqUwL/IC70HiWc=
github.com/issue9/term/v3 v3.2.7/go.mod h1:DvA/fPiKzX11P/ZoVWJG5QMVpI0ia+uqiU31iZV2jHE=
github.com/issue9/scheduled v0.19.5 h1:SKNzZm7mkm9ChtKun3mgcDBBF4hB/+uhEmY6JLtvJLE=
github.com/issue9/scheduled v0.19.5/go.mod h1:agacfy7vohhXTu+2z+wjOTlP2X64hlM8xu3zWDE/euw=
github.com/issue9/sliceutil v0.16.1 h1:NVZ2feN014oUmMpZvZUrKkKMGhAfzT8WNzJF81krebM=
github.com/issue9/sliceutil v0.16.1/go.mod h1:ldun6sT4/bOJxuMtOXhtc6P7GCwE7L+avV86HNks7qk=
github.com/issue9/source v0.9.1 h1:duANl/q03NzDtZN5sOPia+s4vBu8c1CqtHGoluY0Tto=
github.com/issue9/source v0.9.1/go.mod h1:8L8ef8XhMftlE2ZQ8j60h5hTGlQmPjm/8zvoXr5fnTY=
github.com/issue9/term/v3 v3.2.8 h1:vAtsr9FLwrDQRyU7S8AOUI3f+QrYsXVHT/kee9MuMkk=
github.com/issue9/term/v3 v3.2.8/go.mod h1:S/xLgjEXJNr7C6UhcGTEOV5k94mzHRcYMmtvhLJoX6A=
github.com/issue9/unique/v2 v2.1.0 h1:lE9hstenrbBgDM/Iulv7d75qAYpgoDV8rSRoLmEBHOk=
github.com/issue9/unique/v2 v2.1.0/go.mod h1:qZoDKnfu+7Q0yxhifVseRKD2Wea9Tc9zdXwALnFc54A=
github.com/issue9/version v1.0.8 h1:IsNdDYdV8UGDGwwgp8H4RszJE0Ko26HjWg9pZzyOivs=
github.com/issue9/version v1.0.8/go.mod h1:w8bQwODBOG5+iaS3qIJbElxxpp3Uo4x5F39qKBqwpdc=
github.com/issue9/web v0.89.0 h1:hfyhMWqJv8dumZZkT2kXcV3sDwkM1GjjcTjMGuk53IM=
github.com/issue9/web v0.89.0/go.mod h1:CnDJ05ITcOTVVdAnc3tLBpV7aYqUW6j5FOEiJtA5GdU=
github.com/issue9/web v0.92.0 h1:yheONHWMXXf3/qdbhKiRfUfSJIHK13zsnkSVd5pfQoM=
github.com/issue9/web v0.92.0/go.mod h1:IIVT/CPr/uyZcYj+RVR2yk7qMIvHk7LDycEQU5VlABo=
github.com/jellydator/ttlcache/v3 v3.2.0 h1:6lqVJ8X3ZaUwvzENqPAobDsXNExfUJd61u++uW8a3LE=
github.com/jellydator/ttlcache/v3 v3.2.0/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4=
github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
Expand Down
39 changes: 39 additions & 0 deletions validator/file.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// SPDX-FileCopyrightText: 2024 caixw
//
// SPDX-License-Identifier: MIT

package validator

import (
"errors"
"io/fs"
"os"
)

// FileExists path 是否存在
func FileExists(path string) bool {
_, err := os.Stat(path)
return err == nil || !errors.Is(err, fs.ErrNotExist)
}

// IsDir path 是否为一个目录
func IsDir(path string) bool {
s, err := os.Stat(path)
return err == nil && s.IsDir()
}

// FileExistsFS 判断文件是否存在于 fsys
func FileExistsFS(fsys fs.FS) func(string) bool {
return func(path string) bool {
_, err := fs.Stat(fsys, path)
return err == nil || !errors.Is(err, fs.ErrNotExist)
}
}

// IsDirFS 判断 fsys 中的 path 是否为目录
func IsDirFS(fsys fs.FS) func(string) bool {
return func(path string) bool {
s, err := os.Stat(path)
return err == nil && s.IsDir()
}
}
36 changes: 36 additions & 0 deletions validator/file_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// SPDX-FileCopyrightText: 2024 caixw
//
// SPDX-License-Identifier: MIT

package validator

import (
"os"
"testing"

"github.com/issue9/assert/v4"
)

func TestFileExists(t *testing.T) {
a := assert.New(t, false)

a.True(FileExists("./file.go")).
False(FileExists("./not-exists.go"))

f := FileExistsFS(os.DirFS("./"))
a.True(f("file.go")).
False(f("not-exists.go"))
}

func TestIsDir(t *testing.T) {
a := assert.New(t, false)

a.True(IsDir(".")).
False(IsDir("./file.go")).
False(IsDir("not-exists.go"))

f := IsDirFS(os.DirFS("./"))
a.True(f(".")).
False(f("file.go")).
False(f("not-exists.go"))
}

0 comments on commit e3bedfa

Please sign in to comment.