Skip to content

Latest commit

 

History

History
91 lines (66 loc) · 2.65 KB

ReadIndex.md

File metadata and controls

91 lines (66 loc) · 2.65 KB

ReadIndex() (type)

Data type handler for the index, [, builtin

Description

This is a function you would write when programming a Murex data-type.

It's called by the index, [, builtin.

The purpose of this function is to allow builtins to support sequential reads (where possible) and also create a standard interface for [ (index), thus allowing it to be data-type agnostic.

Usage

Registering your ReadIndex()

// To avoid data races, this should only happen inside func init()
lang.ReadIndexes[ /* your type name */ ] = /* your readIndex func */

Examples

Example ReadIndex() function:

package json

import (
	"github.com/lmorg/murex/lang"
	"github.com/lmorg/murex/utils/json"
)

func index(p *lang.Process, params []string) error {
	var jInterface interface{}

	b, err := p.Stdin.ReadAll()
	if err != nil {
		return err
	}

	err = json.Unmarshal(b, &jInterface)
	if err != nil {
		return err
	}

	marshaller := func(iface interface{}) ([]byte, error) {
		return json.Marshal(iface, p.Stdout.IsTTY())
	}

	return lang.IndexTemplateObject(p, params, &jInterface, marshaller)
}

Detail

While there is support for a dedicated ReadNotIndex() for instances of ![, the template APIs lang.IndexTemplateObject and lang.IndexTemplateTable are both agnostic to the bang prefix.

Parameters

  1. *lang.Process: Process's runtime state. Typically expressed as the variable p
  2. []string: slice of parameters used in [

See Also


This document was generated from lang/stdio/interface_doc.yaml.