matterbridge/vendor/github.com/d5/tengo/v2/stdlib/os_file.go

118 lines
2.9 KiB
Go

package stdlib
import (
"os"
"github.com/d5/tengo/v2"
)
func makeOSFile(file *os.File) *tengo.ImmutableMap {
return &tengo.ImmutableMap{
Value: map[string]tengo.Object{
// chdir() => true/error
"chdir": &tengo.UserFunction{
Name: "chdir",
Value: FuncARE(file.Chdir),
}, //
// chown(uid int, gid int) => true/error
"chown": &tengo.UserFunction{
Name: "chown",
Value: FuncAIIRE(file.Chown),
}, //
// close() => error
"close": &tengo.UserFunction{
Name: "close",
Value: FuncARE(file.Close),
}, //
// name() => string
"name": &tengo.UserFunction{
Name: "name",
Value: FuncARS(file.Name),
}, //
// readdirnames(n int) => array(string)/error
"readdirnames": &tengo.UserFunction{
Name: "readdirnames",
Value: FuncAIRSsE(file.Readdirnames),
}, //
// sync() => error
"sync": &tengo.UserFunction{
Name: "sync",
Value: FuncARE(file.Sync),
}, //
// write(bytes) => int/error
"write": &tengo.UserFunction{
Name: "write",
Value: FuncAYRIE(file.Write),
}, //
// write(string) => int/error
"write_string": &tengo.UserFunction{
Name: "write_string",
Value: FuncASRIE(file.WriteString),
}, //
// read(bytes) => int/error
"read": &tengo.UserFunction{
Name: "read",
Value: FuncAYRIE(file.Read),
}, //
// chmod(mode int) => error
"chmod": &tengo.UserFunction{
Name: "chmod",
Value: func(args ...tengo.Object) (tengo.Object, error) {
if len(args) != 1 {
return nil, tengo.ErrWrongNumArguments
}
i1, ok := tengo.ToInt64(args[0])
if !ok {
return nil, tengo.ErrInvalidArgumentType{
Name: "first",
Expected: "int(compatible)",
Found: args[0].TypeName(),
}
}
return wrapError(file.Chmod(os.FileMode(i1))), nil
},
},
// seek(offset int, whence int) => int/error
"seek": &tengo.UserFunction{
Name: "seek",
Value: func(args ...tengo.Object) (tengo.Object, error) {
if len(args) != 2 {
return nil, tengo.ErrWrongNumArguments
}
i1, ok := tengo.ToInt64(args[0])
if !ok {
return nil, tengo.ErrInvalidArgumentType{
Name: "first",
Expected: "int(compatible)",
Found: args[0].TypeName(),
}
}
i2, ok := tengo.ToInt(args[1])
if !ok {
return nil, tengo.ErrInvalidArgumentType{
Name: "second",
Expected: "int(compatible)",
Found: args[1].TypeName(),
}
}
res, err := file.Seek(i1, i2)
if err != nil {
return wrapError(err), nil
}
return &tengo.Int{Value: res}, nil
},
},
// stat() => imap(fileinfo)/error
"stat": &tengo.UserFunction{
Name: "stat",
Value: func(args ...tengo.Object) (tengo.Object, error) {
if len(args) != 0 {
return nil, tengo.ErrWrongNumArguments
}
return osStat(&tengo.String{Value: file.Name()})
},
},
},
}
}