Commit 66599c40 authored by Gustavo Niemeyer's avatar Gustavo Niemeyer

encoding/xml: remove Marshaler support

Marshaler has a number of open areas that need
further thought (e.g. it doesn't handle attributes,
it's supposed to handle tag names internally but has
no information to do so, etc).

We're removing it now and will bring it back with an
interface that covers these aspects, after Go 1.

Related to issue 2771, but doesn't fix it.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5574057
parent ddd67f2e
...@@ -21,16 +21,8 @@ const ( ...@@ -21,16 +21,8 @@ const (
Header = `<?xml version="1.0" encoding="UTF-8"?>` + "\n" Header = `<?xml version="1.0" encoding="UTF-8"?>` + "\n"
) )
// A Marshaler can produce well-formatted XML representing its internal state.
type Marshaler interface {
MarshalXML() ([]byte, error)
}
// Marshal returns the XML encoding of v. // Marshal returns the XML encoding of v.
// //
// If v implements Marshaler, then Marshal calls its MarshalXML method.
// Otherwise, Marshal uses the following procedure to create the XML.
//
// Marshal handles an array or slice by marshalling each of the elements. // Marshal handles an array or slice by marshalling each of the elements.
// Marshal handles a pointer by marshalling the value it points at or, if the // Marshal handles a pointer by marshalling the value it points at or, if the
// pointer is nil, by writing nothing. Marshal handles an interface value by // pointer is nil, by writing nothing. Marshal handles an interface value by
...@@ -128,18 +120,6 @@ func (p *printer) marshalValue(val reflect.Value, finfo *fieldInfo) error { ...@@ -128,18 +120,6 @@ func (p *printer) marshalValue(val reflect.Value, finfo *fieldInfo) error {
kind := val.Kind() kind := val.Kind()
typ := val.Type() typ := val.Type()
// Try Marshaler
if typ.NumMethod() > 0 {
if marshaler, ok := val.Interface().(Marshaler); ok {
bytes, err := marshaler.MarshalXML()
if err != nil {
return err
}
p.Write(bytes)
return nil
}
}
// Drill into pointers/interfaces // Drill into pointers/interfaces
if kind == reflect.Ptr || kind == reflect.Interface { if kind == reflect.Ptr || kind == reflect.Interface {
if val.IsNil() { if val.IsNil() {
......
...@@ -34,12 +34,6 @@ type Ship struct { ...@@ -34,12 +34,6 @@ type Ship struct {
secret string secret string
} }
type RawXML string
func (rx RawXML) MarshalXML() ([]byte, error) {
return []byte(rx), nil
}
type NamedType string type NamedType string
type Port struct { type Port struct {
...@@ -298,13 +292,6 @@ var marshalTests = []struct { ...@@ -298,13 +292,6 @@ var marshalTests = []struct {
UnmarshalOnly: true, UnmarshalOnly: true,
}, },
// Test marshaller interface
{
Value: RawXML("</>"),
ExpectXML: `</>`,
MarshalOnly: true,
},
// Test structs // Test structs
{Value: &Port{Type: "ssl", Number: "443"}, ExpectXML: `<port type="ssl">443</port>`}, {Value: &Port{Type: "ssl", Number: "443"}, ExpectXML: `<port type="ssl">443</port>`},
{Value: &Port{Number: "443"}, ExpectXML: `<port>443</port>`}, {Value: &Port{Number: "443"}, ExpectXML: `<port>443</port>`},
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment