func AsFloat64(v interface{}) (float64, bool) {
	switch v := v.(type) {
	case float64:
		return v, true
	case float32:
		return float64(v), true
	case int64:
		return float64(v), true
	case ID:
		return float64(v), true
	case uint64:
		return float64(v), true
	case int:
		return float64(v), true
	case int32:
		return float64(v), true
	case uint:
		return float64(v), true
	case uint32:
		return float64(v), true
	}
	return 0.0, false
}
AsFloat64 is an extended type assertion for float64.
package wamp
import "reflect"
func AsString(v interface{}) (string, bool) {
	switch v := v.(type) {
	case string:
		return v, true
	case []byte:
		return string(v), true
	case URI:
		return string(v), true
	}
	return "", false
}
func AsID(v interface{}) (ID, bool) {
	if i64, ok := AsInt64(v); ok {
		return ID(i64), true
	}
	return ID(0), false
}
func AsURI(v interface{}) (URI, bool) {
	switch v := v.(type) {
	case URI:
		return v, true
	case string:
		return URI(v), true
	case []byte:
		return URI(string(v)), true
	}
	return URI(""), false
}
func AsInt64(v interface{}) (int64, bool) {
	switch v := v.(type) {
	case int64:
		return v, true
	case ID:
		return int64(v), true
	case uint64:
		return int64(v), true
	case int:
		return int64(v), true
	case int32:
		return int64(v), true
	case uint:
		return int64(v), true
	case uint32:
		return int64(v), true
	case float64:
		return int64(v), true
	case float32:
		return int64(v), true
	}
	return 0, false
}