Documentation ¶
Overview ¶
Package types implements the CloudEvents type system.
CloudEvents defines a set of abstract types for event context attributes. Each type has a corresponding native Go type and a canonical string encoding. The native Go types used to represent the CloudEvents types are: bool, int32, string, []byte, *url.URL, time.Time
+----------------+----------------+-----------------------------------+ |CloudEvents Type|Native Type |Convertible From | +================+================+===================================+ |Bool |bool |bool | +----------------+----------------+-----------------------------------+ |Integer |int32 |Any numeric type with value in | | | |range of int32 | +----------------+----------------+-----------------------------------+ |String |string |string | +----------------+----------------+-----------------------------------+ |Binary |[]byte |[]byte | +----------------+----------------+-----------------------------------+ |URI-Reference |*url.URL |url.URL, types.URIRef, types.URI | +----------------+----------------+-----------------------------------+ |URI |*url.URL |url.URL, types.URIRef, types.URI | | | |Must be an absolute URI. | +----------------+----------------+-----------------------------------+ |Timestamp |time.Time |time.Time, types.Timestamp | +----------------+----------------+-----------------------------------+
Extension attributes may be stored as a native type or a canonical string. The To<Type> functions will convert to the desired <Type> from any convertible type or from the canonical string form.
The Parse<Type> and Format<Type> functions convert native types to/from canonical strings.
Note are no Parse or Format functions for URL or string. For URL use the standard url.Parse() and url.URL.String(). The canonical string format of a string is the string itself.
Example ¶
package main import ( "fmt" "math" "time" "github.com/cloudevents/sdk-go/v2/types" ) func main() { // Handle a time value that may be in native or canonical string form. printTime := func(v interface{}) { t, err := types.ToTime(v) fmt.Printf("%v %v\n", t, err) } printTime(time.Date(1969, 3, 21, 12, 24, 0, 0, time.UTC)) printTime("2020-03-21T12:34:56.78Z") // Convert numeric values to common 32-bit integer form printInt := func(v interface{}) { i, err := types.ToInteger(v) fmt.Printf("%v %v\n", i, err) } printInt(123.456) printInt("456") printInt(int64(99999)) // But not illegal or out-of-range values printInt(math.MaxInt32 + 1) printInt("not an int") }
Output: 1969-03-21 12:24:00 +0000 UTC <nil> 2020-03-21 12:34:56.78 +0000 UTC <nil> 123 <nil> 456 <nil> 99999 <nil> 0 cannot convert 2147483648 to int32: out of range 0 strconv.ParseFloat: parsing "not an int": invalid syntax
Index ¶
- func Allocate(obj interface{}) (asPtr interface{}, asValue reflect.Value)
- func Clone(v interface{}) interface{}
- func Format(v interface{}) (string, error)
- func FormatBinary(v []byte) string
- func FormatBool(v bool) string
- func FormatInteger(v int32) string
- func FormatTime(v time.Time) string
- func IsZero(v interface{}) bool
- func ParseBinary(v string) ([]byte, error)
- func ParseBool(v string) (bool, error)
- func ParseInteger(v string) (int32, error)
- func ParseTime(v string) (time.Time, error)
- func ToBinary(v interface{}) ([]byte, error)
- func ToBool(v interface{}) (bool, error)
- func ToInteger(v interface{}) (int32, error)
- func ToString(v interface{}) (string, error)
- func ToTime(v interface{}) (time.Time, error)
- func ToURL(v interface{}) (*url.URL, error)
- func Validate(v interface{}) (interface{}, error)
- type ConvertErr
- type Timestamp
- type URI
- type URIRef
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Allocate ¶
Allocate allocates a new instance of type t and returns: asPtr is of type t if t is a pointer type and of type &t otherwise asValue is a Value of type t pointing to the same data as asPtr
func Clone ¶
func Clone(v interface{}) interface{}
Clone v clones a CloudEvents attribute value, which is one of the valid types:
bool, int32, string, []byte, types.URI, types.URIRef, types.Timestamp
Returns the same type Panics if the type is not valid
func Format ¶
Format returns the canonical string format of v, where v can be any type that is convertible to a CloudEvents type.
func FormatBinary ¶
FormatBinary returns canonical string format: standard base64 encoding
func FormatBool ¶
FormatBool returns canonical string format: "true" or "false"
func FormatInteger ¶
FormatInteger returns canonical string format: decimal notation.
func FormatTime ¶
FormatTime returns canonical string format: RFC3339 with nanoseconds
func ParseBinary ¶
ParseBinary parse canonical string format: standard base64 encoding
func ParseInteger ¶
ParseInteger parse canonical string format: decimal notation.
func ToString ¶
ToString returns a string value unaltered.
This function does not perform canonical string encoding, use one of the Format functions for that.
Types ¶
type ConvertErr ¶
type ConvertErr struct { // Value being converted Value interface{} // Type of attempted conversion Type reflect.Type // contains filtered or unexported fields }
func (*ConvertErr) Error ¶
func (e *ConvertErr) Error() string
type Timestamp ¶
Timestamp wraps time.Time to normalize the time layout to RFC3339. It is intended to enforce compliance with the CloudEvents spec for their definition of Timestamp. Custom marshal methods are implemented to ensure the outbound Timestamp is a string in the RFC3339 layout.
func ParseTimestamp ¶
ParseTimestamp attempts to parse the given time assuming RFC3339 layout
func (*Timestamp) MarshalJSON ¶
MarshalJSON implements a custom json marshal method used when this type is marshaled using json.Marshal.
func (*Timestamp) MarshalXML ¶
MarshalXML implements a custom xml marshal method used when this type is marshaled using xml.Marshal.
func (*Timestamp) UnmarshalJSON ¶
UnmarshalJSON implements the json unmarshal method used when this type is unmarshaled using json.Unmarshal.
func (*Timestamp) UnmarshalXML ¶
UnmarshalXML implements the xml unmarshal method used when this type is unmarshaled using xml.Unmarshal.
type URI ¶
URI is a wrapper to url.URL. It is intended to enforce compliance with the CloudEvents spec for their definition of URI. Custom marshal methods are implemented to ensure the outbound URI object is a flat string.
func (URI) MarshalJSON ¶
MarshalJSON implements a custom json marshal method used when this type is marshaled using json.Marshal.
func (URI) MarshalXML ¶
MarshalXML implements a custom xml marshal method used when this type is marshaled using xml.Marshal.
func (*URI) UnmarshalJSON ¶
UnmarshalJSON implements the json unmarshal method used when this type is unmarshaled using json.Unmarshal.
func (*URI) UnmarshalXML ¶
UnmarshalXML implements the xml unmarshal method used when this type is unmarshaled using xml.Unmarshal.
type URIRef ¶
URIRef is a wrapper to url.URL. It is intended to enforce compliance with the CloudEvents spec for their definition of URI-Reference. Custom marshal methods are implemented to ensure the outbound URIRef object is is a flat string.
func ParseURIRef ¶
ParseURIRef attempts to parse the given string as a URI-Reference.
func (URIRef) MarshalJSON ¶
MarshalJSON implements a custom json marshal method used when this type is marshaled using json.Marshal.
func (URIRef) MarshalXML ¶
MarshalXML implements a custom xml marshal method used when this type is marshaled using xml.Marshal.
func (*URIRef) UnmarshalJSON ¶
UnmarshalJSON implements the json unmarshal method used when this type is unmarshaled using json.Unmarshal.
func (*URIRef) UnmarshalXML ¶
UnmarshalXML implements the xml unmarshal method used when this type is unmarshaled using xml.Unmarshal.