From d27da31f03d5fe4fe61db6f56bd4f4ea9e1afff2 Mon Sep 17 00:00:00 2001 From: brettlangdon Date: Sun, 21 Jun 2015 22:43:12 -0400 Subject: [PATCH] add reference struct --- reference.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 reference.go diff --git a/reference.go b/reference.go new file mode 100644 index 0000000..98853f5 --- /dev/null +++ b/reference.go @@ -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") +}