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  }