package forge
|
|
|
|
import "errors"
|
|
|
|
// Reference struct used for holding data neede for Reference data type
|
|
type Reference struct {
|
|
section *Section
|
|
name string
|
|
}
|
|
|
|
// NewReference will create and initialize a new Reference value
|
|
func NewReference(name string, section *Section) *Reference {
|
|
return &Reference{
|
|
section: section,
|
|
name: name,
|
|
}
|
|
}
|
|
|
|
func (reference *Reference) resolve() Value {
|
|
value, err := reference.section.Resolve(reference.name)
|
|
if err != nil {
|
|
value = NewNull()
|
|
}
|
|
return value
|
|
}
|
|
|
|
// GetType will simply return back REFERENCE
|
|
func (reference *Reference) GetType() ValueType {
|
|
return REFERENCE
|
|
}
|
|
|
|
// GetValue will resolve and return the value from the underlying reference
|
|
func (reference *Reference) GetValue() interface{} {
|
|
return reference.resolve().GetValue()
|
|
}
|
|
|
|
// UpdateValue will simply throw an error since it is not allowed for References
|
|
func (reference *Reference) UpdateValue(value interface{}) error {
|
|
return errors.New("cannot update value of a reference")
|
|
}
|