123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- 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()})
- },
- },
- },
- }
- }
|