github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/optional/encoders/base64.go (about) 1 package encoders 2 3 import ( 4 "encoding/base64" 5 "io" 6 7 "github.com/lmorg/murex/lang" 8 "github.com/lmorg/murex/lang/types" 9 ) 10 11 func init() { 12 lang.DefineMethod("base64", cmdBase64, types.Any, types.String) 13 lang.DefineMethod("!base64", cmdUnbase64, types.String, types.Generic) 14 } 15 16 func cmdBase64(p *lang.Process) (err error) { 17 if err = p.ErrIfNotAMethod(); err != nil { 18 p.Stdout.SetDataType(types.Null) 19 return err 20 } 21 22 p.Stdout.SetDataType(types.String) 23 encoder := base64.NewEncoder(base64.StdEncoding, p.Stdout) 24 _, err = io.Copy(encoder, p.Stdin) 25 26 encoder.Close() 27 p.Stdout.Writeln([]byte{}) 28 return 29 } 30 31 func cmdUnbase64(p *lang.Process) (err error) { 32 if err = p.ErrIfNotAMethod(); err != nil { 33 p.Stdout.SetDataType(types.Null) 34 return err 35 } 36 37 p.Stdout.SetDataType(types.Generic) 38 decoder := base64.NewDecoder(base64.StdEncoding, p.Stdin) 39 _, err = io.Copy(p.Stdout, decoder) 40 return 41 }