|
|
|
@ -0,0 +1,40 @@ |
|
|
|
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") |
|
|
|
} |