goyaml is now yaml.
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 873d53b..0000000
--- a/Makefile
+++ /dev/null
@@ -1,39 +0,0 @@
-include $(GOROOT)/src/Make.inc
-
-YAML=yaml-0.1.3
-LIBYAML=$(PWD)/$(YAML)/src/.libs/libyaml.a
-
-TARG=launchpad.net/goyaml
-
-GOFILES=\
- goyaml.go\
- resolve.go\
-
-CGOFILES=\
- decode.go\
- encode.go\
-
-CGO_OFILES+=\
- helpers.o\
- api.o\
- scanner.o\
- reader.o\
- parser.o\
- writer.o\
- emitter.o\
-
-GOFMT=gofmt
-
-BADFMT:=$(shell $(GOFMT) -l $(GOFILES) $(CGOFILES) $(wildcard *_test.go))
-
-all: package
-gofmt: $(BADFMT)
- @for F in $(BADFMT); do $(GOFMT) -w $$F && echo $$F; done
-
-include $(GOROOT)/src/Make.pkg
-
-ifneq ($(BADFMT),)
-ifneq ($(MAKECMDGOALS),gofmt)
-$(warning WARNING: make gofmt: $(BADFMT))
-endif
-endif
diff --git a/apic.go b/apic.go
index 29be91d..95ec014 100644
--- a/apic.go
+++ b/apic.go
@@ -1,4 +1,4 @@
-package goyaml
+package yaml
import (
"io"
diff --git a/decode.go b/decode.go
index 6586be4..fd1ff96 100644
--- a/decode.go
+++ b/decode.go
@@ -1,4 +1,4 @@
-package goyaml
+package yaml
import (
"reflect"
diff --git a/decode_test.go b/decode_test.go
index 83696b5..694a11b 100644
--- a/decode_test.go
+++ b/decode_test.go
@@ -1,8 +1,8 @@
-package goyaml_test
+package yaml_test
import (
. "launchpad.net/gocheck"
- "launchpad.net/goyaml"
+ "gonuts.org/v1/yaml"
"math"
"reflect"
)
@@ -377,7 +377,7 @@
pv := reflect.New(pt.Elem())
value = pv.Interface()
}
- err := goyaml.Unmarshal([]byte(item.data), value)
+ err := yaml.Unmarshal([]byte(item.data), value)
c.Assert(err, IsNil, Commentf("Item #%d", i))
if t.Kind() == reflect.String {
c.Assert(*value.(*string), Equals, item.value, Commentf("Item #%d", i))
@@ -389,7 +389,7 @@
func (s *S) TestUnmarshalNaN(c *C) {
value := map[string]interface{}{}
- err := goyaml.Unmarshal([]byte("notanum: .NaN"), &value)
+ err := yaml.Unmarshal([]byte("notanum: .NaN"), &value)
c.Assert(err, IsNil)
c.Assert(math.IsNaN(value["notanum"].(float64)), Equals, true)
}
@@ -408,7 +408,7 @@
func (s *S) TestUnmarshalErrors(c *C) {
for _, item := range unmarshalErrorTests {
var value interface{}
- err := goyaml.Unmarshal([]byte(item.data), &value)
+ err := yaml.Unmarshal([]byte(item.data), &value)
c.Assert(err, ErrorMatches, item.error, Commentf("Partial unmarshal: %#v", value))
}
}
@@ -449,7 +449,7 @@
func (s *S) TestUnmarshalWithSetter(c *C) {
for _, item := range setterTests {
obj := &typeWithSetterField{}
- err := goyaml.Unmarshal([]byte(item.data), obj)
+ err := yaml.Unmarshal([]byte(item.data), obj)
c.Assert(err, IsNil)
c.Assert(obj.Field, NotNil,
Commentf("Pointer not initialized (%#v)", item.value))
@@ -460,7 +460,7 @@
func (s *S) TestUnmarshalWholeDocumentWithSetter(c *C) {
obj := &typeWithSetter{}
- err := goyaml.Unmarshal([]byte(setterTests[0].data), obj)
+ err := yaml.Unmarshal([]byte(setterTests[0].data), obj)
c.Assert(err, IsNil)
c.Assert(obj.tag, Equals, setterTests[0].tag)
value, ok := obj.value.(map[interface{}]interface{})
@@ -478,7 +478,7 @@
m := map[string]*typeWithSetter{}
data := "{abc: 1, def: 2, ghi: 3, jkl: 4}"
- err := goyaml.Unmarshal([]byte(data), m)
+ err := yaml.Unmarshal([]byte(data), m)
c.Assert(err, IsNil)
c.Assert(m["abc"], NotNil)
c.Assert(m["def"], IsNil)
@@ -502,7 +502,7 @@
// var err error
// for i := 0; i < c.N; i++ {
// var v map[string]interface{}
-// err = goyaml.Unmarshal(data, &v)
+// err = yaml.Unmarshal(data, &v)
// }
// if err != nil {
// panic(err)
@@ -511,9 +511,9 @@
//
//func (s *S) BenchmarkMarshal(c *C) {
// var v map[string]interface{}
-// goyaml.Unmarshal(data, &v)
+// yaml.Unmarshal(data, &v)
// c.ResetTimer()
// for i := 0; i < c.N; i++ {
-// goyaml.Marshal(&v)
+// yaml.Marshal(&v)
// }
//}
diff --git a/emitterc.go b/emitterc.go
index 49c7f46..542ffd2 100644
--- a/emitterc.go
+++ b/emitterc.go
@@ -1,4 +1,4 @@
-package goyaml
+package yaml
import (
"bytes"
diff --git a/encode.go b/encode.go
index b228a10..c700443 100644
--- a/encode.go
+++ b/encode.go
@@ -1,4 +1,4 @@
-package goyaml
+package yaml
import (
"reflect"
diff --git a/encode_test.go b/encode_test.go
index 2887466..bf117fc 100644
--- a/encode_test.go
+++ b/encode_test.go
@@ -1,9 +1,9 @@
-package goyaml_test
+package yaml_test
import (
"fmt"
. "launchpad.net/gocheck"
- "launchpad.net/goyaml"
+ "gonuts.org/v1/yaml"
"math"
"strconv"
"strings"
@@ -216,7 +216,7 @@
func (s *S) TestMarshal(c *C) {
for _, item := range marshalTests {
- data, err := goyaml.Marshal(item.value)
+ data, err := yaml.Marshal(item.value)
c.Assert(err, IsNil)
c.Assert(string(data), Equals, item.data)
}
@@ -237,7 +237,7 @@
func (s *S) TestMarshalErrors(c *C) {
for _, item := range marshalErrorTests {
- _, err := goyaml.Marshal(item.value)
+ _, err := yaml.Marshal(item.value)
c.Assert(err, ErrorMatches, item.error)
}
}
@@ -269,12 +269,12 @@
var err error
func() {
type T struct{ A int }
- data, err = goyaml.Marshal(&T{})
+ data, err = yaml.Marshal(&T{})
c.Assert(err, IsNil)
}()
func() {
type T struct{ B int }
- data, err = goyaml.Marshal(&T{})
+ data, err = yaml.Marshal(&T{})
c.Assert(err, IsNil)
}()
c.Assert(string(data), Equals, "b: 0\n")
@@ -298,7 +298,7 @@
obj := &typeWithGetterField{}
obj.Field.tag = item.tag
obj.Field.value = item.value
- data, err := goyaml.Marshal(obj)
+ data, err := yaml.Marshal(obj)
c.Assert(err, IsNil)
c.Assert(string(data), Equals, string(item.data))
}
@@ -308,7 +308,7 @@
obj := &typeWithGetter{}
obj.tag = ""
obj.value = map[string]string{"hello": "world!"}
- data, err := goyaml.Marshal(obj)
+ data, err := yaml.Marshal(obj)
c.Assert(err, IsNil)
c.Assert(string(data), Equals, "hello: world!\n")
}
@@ -356,7 +356,7 @@
for _, k := range order {
m[k] = 1
}
- data, err := goyaml.Marshal(m)
+ data, err := yaml.Marshal(m)
c.Assert(err, IsNil)
out := "\n" + string(data)
last := 0
diff --git a/goyaml.go b/goyaml.go
deleted file mode 100644
index dbc633e..0000000
--- a/goyaml.go
+++ /dev/null
@@ -1,300 +0,0 @@
-// Package goyaml implements YAML support for the Go language.
-package goyaml
-
-import (
- "errors"
- "fmt"
- "reflect"
- "runtime"
- "strings"
- "sync"
-)
-
-func handleErr(err *error) {
- if r := recover(); r != nil {
- if _, ok := r.(runtime.Error); ok {
- panic(r)
- } else if _, ok := r.(*reflect.ValueError); ok {
- panic(r)
- } else if _, ok := r.(externalPanic); ok {
- panic(r)
- } else if s, ok := r.(string); ok {
- *err = errors.New("YAML error: " + s)
- } else if e, ok := r.(error); ok {
- *err = e
- } else {
- panic(r)
- }
- }
-}
-
-// 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 goyaml 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 goyaml 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 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).
-// Conflicting names result in a runtime error.
-//
-// For example:
-//
-// type T struct {
-// F int `yaml:"a,omitempty"`
-// B int
-// }
-// var T t
-// goyaml.Unmarshal([]byte("a: 1\nb: 2"), &t)
-//
-// See the documentation of Marshal for the format of tags and a list of
-// supported tag options.
-//
-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
-}
-
-// Marshal serializes the value 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.
-//
-// In the case of struct values, only exported fields will be serialized.
-// The lowercased field name is used as the key for each exported field,
-// but this behavior may be changed using the respective field tag.
-// The tag may also contain flags to tweak the marshalling behavior for
-// the field. Conflicting names result in a runtime error. The tag format
-// accepted is:
-//
-// `(...) yaml:"[<key>][,<flag1>[,<flag2>]]" (...)`
-//
-// The following flags are currently supported:
-//
-// omitempty Only include the field if it's not set to the zero
-// value for the type or to empty slices or maps.
-// Does not apply to zero valued structs.
-//
-// flow Marshal using a flow style (useful for structs,
-// sequences and maps.
-//
-// inline Inline the struct it's applied to, so its fields
-// are processed as if they were part of the outer
-// struct.
-//
-// In addition, if the key is "-", the field is ignored.
-//
-// For example:
-//
-// type T struct {
-// F int "a,omitempty"
-// 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 error) {
- defer handleErr(&err)
- e := newEncoder()
- defer e.destroy()
- e.marshal("", reflect.ValueOf(in))
- e.finish()
- out = e.out
- return
-}
-
-// --------------------------------------------------------------------------
-// Maintain a mapping of keys to structure field indexes
-
-// The code in this section was copied from gobson.
-
-// structInfo holds details for the serialization of fields of
-// a given struct.
-type structInfo struct {
- FieldsMap map[string]fieldInfo
- FieldsList []fieldInfo
-
- // InlineMap is the number of the field in the struct that
- // contains an ,inline map, or -1 if there's none.
- InlineMap int
-}
-
-type fieldInfo struct {
- Key string
- Num int
- OmitEmpty bool
- Flow bool
-
- // Inline holds the field index if the field is part of an inlined struct.
- Inline []int
-}
-
-var structMap = make(map[reflect.Type]*structInfo)
-var fieldMapMutex sync.RWMutex
-
-type externalPanic string
-
-func (e externalPanic) String() string {
- return string(e)
-}
-
-func getStructInfo(st reflect.Type) (*structInfo, error) {
- fieldMapMutex.RLock()
- sinfo, found := structMap[st]
- fieldMapMutex.RUnlock()
- if found {
- return sinfo, nil
- }
-
- n := st.NumField()
- fieldsMap := make(map[string]fieldInfo)
- fieldsList := make([]fieldInfo, 0, n)
- inlineMap := -1
- for i := 0; i != n; i++ {
- field := st.Field(i)
- if field.PkgPath != "" {
- continue // Private field
- }
-
- info := fieldInfo{Num: i}
-
- tag := field.Tag.Get("yaml")
- if tag == "" && strings.Index(string(field.Tag), ":") < 0 {
- tag = string(field.Tag)
- }
- if tag == "-" {
- continue
- }
-
- inline := false
- fields := strings.Split(tag, ",")
- if len(fields) > 1 {
- for _, flag := range fields[1:] {
- switch flag {
- case "omitempty":
- info.OmitEmpty = true
- case "flow":
- info.Flow = true
- case "inline":
- inline = true
- default:
- msg := fmt.Sprintf("Unsupported flag %q in tag %q of type %s", flag, tag, st)
- panic(externalPanic(msg))
- }
- }
- tag = fields[0]
- }
-
- if inline {
- switch field.Type.Kind() {
- //case reflect.Map:
- // if inlineMap >= 0 {
- // return nil, errors.New("Multiple ,inline maps in struct " + st.String())
- // }
- // if field.Type.Key() != reflect.TypeOf("") {
- // return nil, errors.New("Option ,inline needs a map with string keys in struct " + st.String())
- // }
- // inlineMap = info.Num
- case reflect.Struct:
- sinfo, err := getStructInfo(field.Type)
- if err != nil {
- return nil, err
- }
- for _, finfo := range sinfo.FieldsList {
- if _, found := fieldsMap[finfo.Key]; found {
- msg := "Duplicated key '" + finfo.Key + "' in struct " + st.String()
- return nil, errors.New(msg)
- }
- if finfo.Inline == nil {
- finfo.Inline = []int{i, finfo.Num}
- } else {
- finfo.Inline = append([]int{i}, finfo.Inline...)
- }
- fieldsMap[finfo.Key] = finfo
- fieldsList = append(fieldsList, finfo)
- }
- default:
- //panic("Option ,inline needs a struct value or map field")
- panic("Option ,inline needs a struct value field")
- }
- continue
- }
-
- if tag != "" {
- info.Key = tag
- } else {
- info.Key = strings.ToLower(field.Name)
- }
-
- if _, found = fieldsMap[info.Key]; found {
- msg := "Duplicated key '" + info.Key + "' in struct " + st.String()
- return nil, errors.New(msg)
- }
-
- fieldsList = append(fieldsList, info)
- fieldsMap[info.Key] = info
- }
-
- sinfo = &structInfo{fieldsMap, fieldsList, inlineMap}
-
- fieldMapMutex.Lock()
- structMap[st] = sinfo
- fieldMapMutex.Unlock()
- return sinfo, nil
-}
-
-func isZero(v reflect.Value) bool {
- switch v.Kind() {
- case reflect.String:
- return len(v.String()) == 0
- case reflect.Interface, reflect.Ptr:
- return v.IsNil()
- case reflect.Slice:
- return v.Len() == 0
- case reflect.Map:
- return v.Len() == 0
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- return v.Int() == 0
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
- return v.Uint() == 0
- case reflect.Bool:
- return !v.Bool()
- }
- return false
-}
diff --git a/parserc.go b/parserc.go
index 0fdfa4e..0a7037a 100644
--- a/parserc.go
+++ b/parserc.go
@@ -1,4 +1,4 @@
-package goyaml
+package yaml
import (
"bytes"
diff --git a/readerc.go b/readerc.go
index c732935..d5fb097 100644
--- a/readerc.go
+++ b/readerc.go
@@ -1,4 +1,4 @@
-package goyaml
+package yaml
import (
"io"
diff --git a/resolve.go b/resolve.go
index a31a533..d4bd532 100644
--- a/resolve.go
+++ b/resolve.go
@@ -1,4 +1,4 @@
-package goyaml
+package yaml
import (
"math"
diff --git a/scannerc.go b/scannerc.go
index 943a597..fe93b19 100644
--- a/scannerc.go
+++ b/scannerc.go
@@ -1,4 +1,4 @@
-package goyaml
+package yaml
import (
"bytes"
diff --git a/sorter.go b/sorter.go
index e1ee85f..5958822 100644
--- a/sorter.go
+++ b/sorter.go
@@ -1,4 +1,4 @@
-package goyaml
+package yaml
import (
"reflect"
diff --git a/suite_test.go b/suite_test.go
index 963ab0b..111d756 100644
--- a/suite_test.go
+++ b/suite_test.go
@@ -1,4 +1,4 @@
-package goyaml_test
+package yaml_test
import (
. "launchpad.net/gocheck"
diff --git a/writerc.go b/writerc.go
index 4809bfb..190362f 100644
--- a/writerc.go
+++ b/writerc.go
@@ -1,4 +1,4 @@
-package goyaml
+package yaml
// Set the writer error and return false.
func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool {
diff --git a/yamlh.go b/yamlh.go
index 1fea365..6624d6c 100644
--- a/yamlh.go
+++ b/yamlh.go
@@ -1,4 +1,4 @@
-package goyaml
+package yaml
import (
"io"
diff --git a/yamlprivateh.go b/yamlprivateh.go
index 1c0b23d..8110ce3 100644
--- a/yamlprivateh.go
+++ b/yamlprivateh.go
@@ -1,4 +1,4 @@
-package goyaml
+package yaml
const (
// The size of the input raw buffer.