Blame vendor/github.com/vmware/govmomi/vim25/xml/extras.go

Packit Service 4d2de5
/*
Packit Service 4d2de5
Copyright (c) 2014 VMware, Inc. All Rights Reserved.
Packit Service 4d2de5
Packit Service 4d2de5
Licensed under the Apache License, Version 2.0 (the "License");
Packit Service 4d2de5
you may not use this file except in compliance with the License.
Packit Service 4d2de5
You may obtain a copy of the License at
Packit Service 4d2de5
Packit Service 4d2de5
    http://www.apache.org/licenses/LICENSE-2.0
Packit Service 4d2de5
Packit Service 4d2de5
Unless required by applicable law or agreed to in writing, software
Packit Service 4d2de5
distributed under the License is distributed on an "AS IS" BASIS,
Packit Service 4d2de5
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit Service 4d2de5
See the License for the specific language governing permissions and
Packit Service 4d2de5
limitations under the License.
Packit Service 4d2de5
*/
Packit Service 4d2de5
Packit Service 4d2de5
package xml
Packit Service 4d2de5
Packit Service 4d2de5
import (
Packit Service 4d2de5
	"reflect"
Packit Service 4d2de5
	"time"
Packit Service 4d2de5
)
Packit Service 4d2de5
Packit Service 4d2de5
var xmlSchemaInstance = Name{Space: "http://www.w3.org/2001/XMLSchema-instance", Local: "type"}
Packit Service 4d2de5
Packit Service 4d2de5
var xsiType = Name{Space: "xsi", Local: "type"}
Packit Service 4d2de5
Packit Service 4d2de5
var stringToTypeMap = map[string]reflect.Type{
Packit Service 4d2de5
	"xsd:boolean":       reflect.TypeOf((*bool)(nil)).Elem(),
Packit Service 4d2de5
	"xsd:byte":          reflect.TypeOf((*int8)(nil)).Elem(),
Packit Service 4d2de5
	"xsd:short":         reflect.TypeOf((*int16)(nil)).Elem(),
Packit Service 4d2de5
	"xsd:int":           reflect.TypeOf((*int32)(nil)).Elem(),
Packit Service 4d2de5
	"xsd:long":          reflect.TypeOf((*int64)(nil)).Elem(),
Packit Service 4d2de5
	"xsd:unsignedByte":  reflect.TypeOf((*uint8)(nil)).Elem(),
Packit Service 4d2de5
	"xsd:unsignedShort": reflect.TypeOf((*uint16)(nil)).Elem(),
Packit Service 4d2de5
	"xsd:unsignedInt":   reflect.TypeOf((*uint32)(nil)).Elem(),
Packit Service 4d2de5
	"xsd:unsignedLong":  reflect.TypeOf((*uint64)(nil)).Elem(),
Packit Service 4d2de5
	"xsd:float":         reflect.TypeOf((*float32)(nil)).Elem(),
Packit Service 4d2de5
	"xsd:double":        reflect.TypeOf((*float64)(nil)).Elem(),
Packit Service 4d2de5
	"xsd:string":        reflect.TypeOf((*string)(nil)).Elem(),
Packit Service 4d2de5
	"xsd:dateTime":      reflect.TypeOf((*time.Time)(nil)).Elem(),
Packit Service 4d2de5
	"xsd:base64Binary":  reflect.TypeOf((*[]byte)(nil)).Elem(),
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// Return a reflect.Type for the specified type. Nil if unknown.
Packit Service 4d2de5
func stringToType(s string) reflect.Type {
Packit Service 4d2de5
	return stringToTypeMap[s]
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
// Return a string for the specified reflect.Type. Panic if unknown.
Packit Service 4d2de5
func typeToString(typ reflect.Type) string {
Packit Service 4d2de5
	switch typ.Kind() {
Packit Service 4d2de5
	case reflect.Bool:
Packit Service 4d2de5
		return "xsd:boolean"
Packit Service 4d2de5
	case reflect.Int8:
Packit Service 4d2de5
		return "xsd:byte"
Packit Service 4d2de5
	case reflect.Int16:
Packit Service 4d2de5
		return "xsd:short"
Packit Service 4d2de5
	case reflect.Int32:
Packit Service 4d2de5
		return "xsd:int"
Packit Service 4d2de5
	case reflect.Int, reflect.Int64:
Packit Service 4d2de5
		return "xsd:long"
Packit Service 4d2de5
	case reflect.Uint8:
Packit Service 4d2de5
		return "xsd:unsignedByte"
Packit Service 4d2de5
	case reflect.Uint16:
Packit Service 4d2de5
		return "xsd:unsignedShort"
Packit Service 4d2de5
	case reflect.Uint32:
Packit Service 4d2de5
		return "xsd:unsignedInt"
Packit Service 4d2de5
	case reflect.Uint, reflect.Uint64:
Packit Service 4d2de5
		return "xsd:unsignedLong"
Packit Service 4d2de5
	case reflect.Float32:
Packit Service 4d2de5
		return "xsd:float"
Packit Service 4d2de5
	case reflect.Float64:
Packit Service 4d2de5
		return "xsd:double"
Packit Service 4d2de5
	case reflect.String:
Packit Service 4d2de5
		name := typ.Name()
Packit Service 4d2de5
		if name == "string" {
Packit Service 4d2de5
			return "xsd:string"
Packit Service 4d2de5
		}
Packit Service 4d2de5
		return name
Packit Service 4d2de5
	case reflect.Struct:
Packit Service 4d2de5
		if typ == stringToTypeMap["xsd:dateTime"] {
Packit Service 4d2de5
			return "xsd:dateTime"
Packit Service 4d2de5
		}
Packit Service 4d2de5
Packit Service 4d2de5
		// Expect any other struct to be handled...
Packit Service 4d2de5
		return typ.Name()
Packit Service 4d2de5
	case reflect.Slice:
Packit Service 4d2de5
		if typ.Elem().Kind() == reflect.Uint8 {
Packit Service 4d2de5
			return "xsd:base64Binary"
Packit Service 4d2de5
		}
Packit Service 4d2de5
	case reflect.Array:
Packit Service 4d2de5
		if typ.Elem().Kind() == reflect.Uint8 {
Packit Service 4d2de5
			return "xsd:base64Binary"
Packit Service 4d2de5
		}
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	panic("don't know what to do for type: " + typ.String())
Packit Service 4d2de5
}