Added documentation.
diff --git a/goyaml.go b/goyaml.go index 9835f07..59357cc 100644 --- a/goyaml.go +++ b/goyaml.go
@@ -31,14 +31,54 @@ } } +// Objects implementing the goyaml.Setter interface will receive the YAML +// tag and value via the SetYAML method during unmarshaling, rather than +// being implicitly assigned by the gobson machinery. If setting the value +// works, the method should return true. If it returns false, the given +// value will be omitted from maps and slices. type Setter interface { SetYAML(tag string, value interface{}) bool } +// Objects implementing the goyaml.Getter interface will get the GetYAML() +// method called when gobson is requested to marshal the given value, and +// the result of this method will be marshaled in place of the actual object. type Getter interface { GetYAML() (tag string, value interface{}) } +// 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 last +// slash in the field tag will be used as the name. The value following +// the slash is used to tweak the marshalling process (see Marshal). +// +// For example: +// +// type T struct { +// F int "a/c" +// B int +// } +// var T t +// goyaml.Unmarshal([]byte("a: 1\nb: 2"), &t) +// func Unmarshal(in []byte, out interface{}) (err os.Error) { defer handleErr(&err) d := newDecoder() @@ -51,6 +91,28 @@ return nil } +// Marshal writes the object provided into a YAML document. The structure +// of the generated document will reflect the structure of the value itself. +// Maps, pointers to structs and ints, etc, may all be used as the in value. +// +// Struct fields are only marshalled if they are exported (have an +// upper case first letter), and will be marshalled 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 last +// slash in the field tag will be used as the name. The characters +// following the slash are used as flags for the marshalling process, +// with 'c' meaning conditional (only marshal if non-zero), and 'f' +// meaning use flow style (useful for structs, sequences and maps). +// +// For example: +// +// type T struct { +// F int "a/c" +// B int +// } +// goyaml.Marshal(&T{B: 2}) // Returns "b: 2\n" +// goyaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n" +// func Marshal(in interface{}) (out []byte, err os.Error) { defer handleErr(&err) e := newEncoder()