Created
August 27, 2012 21:32
-
-
Save markchadwick/3492451 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Unmarshal decodes the first document found within the in byte slice | |
// and assigns decoded values into the object pointed by out. | |
// | |
// Maps, pointers to structs and ints, etc, may all be used as out values. | |
// If an internal pointer within a struct is not initialized, goyaml | |
// will initialize it if necessary for unmarshalling the provided data, | |
// but the struct provided as out must not be a nil pointer. | |
// | |
// The type of the decoded values and the type of out will be considered, | |
// and Unmarshal() will do the best possible job to unmarshal values | |
// appropriately. It is NOT considered an error, though, to skip values | |
// because they are not available in the decoded YAML, or if they are not | |
// compatible with the out value. To ensure something was properly | |
// unmarshaled use a map or compare against the previous value for the | |
// field (usually the zero value). | |
// | |
// Struct fields are only unmarshalled if they are exported (have an | |
// upper case first letter), and will be unmarshalled using the field | |
// name lowercased by default. When custom field names are desired, the | |
// tag value may be used to tweak the name. Everything before the first | |
// comma in the field tag will be used as the name. The values following | |
// the comma are used to tweak the marshalling process (see Marshal). | |
// | |
// For example: | |
// | |
// type T struct { | |
// F int "a,omitempty" | |
// B int | |
// } | |
// var T t | |
// goyaml.Unmarshal([]byte("a: 1\nb: 2"), &t) | |
// | |
func Unmarshal(in []byte, out interface{}) (err error) { | |
defer handleErr(&err) | |
d := newDecoder() | |
p := newParser(in) | |
defer p.destroy() | |
node := p.parse() | |
if node != nil { | |
d.unmarshal(node, reflect.ValueOf(out)) | |
} | |
return nil | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment