87 lines
2.1 KiB
Go
87 lines
2.1 KiB
Go
|
package plist
|
||
|
|
||
|
import (
|
||
|
"reflect"
|
||
|
)
|
||
|
|
||
|
// property list format constants
|
||
|
const (
|
||
|
// Used by Decoder to represent an invalid property list.
|
||
|
InvalidFormat = 0
|
||
|
|
||
|
// Used to indicate total abandon with regards to Encoder's output format.
|
||
|
AutomaticFormat = 0
|
||
|
|
||
|
XMLFormat = 1
|
||
|
BinaryFormat = 2
|
||
|
OpenStepFormat = 3
|
||
|
GNUStepFormat = 4
|
||
|
)
|
||
|
|
||
|
// FormatNames for plist
|
||
|
var FormatNames = map[int]string{
|
||
|
InvalidFormat: "unknown/invalid",
|
||
|
XMLFormat: "XML",
|
||
|
BinaryFormat: "Binary",
|
||
|
OpenStepFormat: "OpenStep",
|
||
|
GNUStepFormat: "GNUStep",
|
||
|
}
|
||
|
|
||
|
type unknownTypeError struct {
|
||
|
typ reflect.Type
|
||
|
}
|
||
|
|
||
|
func (u *unknownTypeError) Error() string {
|
||
|
return "plist: can't marshal value of type " + u.typ.String()
|
||
|
}
|
||
|
|
||
|
type invalidPlistError struct {
|
||
|
format string
|
||
|
err error
|
||
|
}
|
||
|
|
||
|
func (e invalidPlistError) Error() string {
|
||
|
s := "plist: invalid " + e.format + " property list"
|
||
|
if e.err != nil {
|
||
|
s += ": " + e.err.Error()
|
||
|
}
|
||
|
return s
|
||
|
}
|
||
|
|
||
|
type plistParseError struct {
|
||
|
format string
|
||
|
err error
|
||
|
}
|
||
|
|
||
|
func (e plistParseError) Error() string {
|
||
|
s := "plist: error parsing " + e.format + " property list"
|
||
|
if e.err != nil {
|
||
|
s += ": " + e.err.Error()
|
||
|
}
|
||
|
return s
|
||
|
}
|
||
|
|
||
|
// A UID represents a unique object identifier. UIDs are serialized in a manner distinct from
|
||
|
// that of integers.
|
||
|
//
|
||
|
// UIDs cannot be serialized in OpenStepFormat or GNUStepFormat property lists.
|
||
|
type UID uint64
|
||
|
|
||
|
// Marshaler is the interface implemented by types that can marshal themselves into valid
|
||
|
// property list objects. The returned value is marshaled in place of the original value
|
||
|
// implementing Marshaler
|
||
|
//
|
||
|
// If an error is returned by MarshalPlist, marshaling stops and the error is returned.
|
||
|
type Marshaler interface {
|
||
|
MarshalPlist() (interface{}, error)
|
||
|
}
|
||
|
|
||
|
// Unmarshaler is the interface implemented by types that can unmarshal themselves from
|
||
|
// property list objects. The UnmarshalPlist method receives a function that may
|
||
|
// be called to unmarshal the original property list value into a field or variable.
|
||
|
//
|
||
|
// It is safe to call the unmarshal function more than once.
|
||
|
type Unmarshaler interface {
|
||
|
UnmarshalPlist(unmarshal func(interface{}) error) error
|
||
|
}
|