func AddParamToDoc(doc *pb.Document, target *SRI, param *pb.Parameter) error {
	if !target.IsField() {
		return errors.New("passed SRI is not a field")
	}
	field, err := GetFieldFromDocument(doc, target.Field)
	if err != nil {
		return err
	}
	field.Param = param
	return nil
}
AddParamToDoc adds the given parameter to the
package data
import (
	"bufio"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"strings"
	pb "rsprd.com/spread/pkg/spreadproto"
)
func InteractiveArgs(r io.ReadCloser, w io.Writer, field *pb.Field, required bool) error {
	param := field.GetParam()
	defaultVal := param.GetDefault()
	if required && defaultVal != nil {
		return nil
	}
	fmt.Fprintln(w, "Name: ", param.Name)
	fmt.Fprintln(w, "Prompt: ", param.Prompt)
	fmt.Fprint(w, "Input: ", displayDefault(defaultVal))
	reader := bufio.NewReader(r)
	text, err := reader.ReadString('\n')
	if err != nil {
		return err
	}
	args := []*pb.Argument{defaultVal}
	if len(text) > 1 {
		_, str := field.GetValue().(*pb.Field_Str)
		args, err = ParseArguments(text[:len(text)-1], str)
		if err != nil {
			return err
		}
	}
	return ApplyArguments(field, args...)
}
func displayDefault(d *pb.Argument) string {
	if d.GetValue() == nil {
		return ""
	}
	var out interface{}
	switch val := d.GetValue().(type) {
	case *pb.Argument_Number:
		out = val.Number
	case *pb.Argument_Str:
		out = val.Str
	case *pb.Argument_Boolean:
		out = val.Boolean
	}
	return fmt.Sprintf("(%v) ", out)
}