mirror of https://github.com/knative/client.git
68 lines
1.4 KiB
Go
68 lines
1.4 KiB
Go
/*
|
|
Copyright 2021 The CloudEvents Authors
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
cloudevents "github.com/cloudevents/sdk-go/v2"
|
|
"github.com/cloudevents/sdk-go/v2/binding/spec"
|
|
"github.com/cloudevents/sdk-go/v2/types"
|
|
)
|
|
|
|
func GetAttribute(event cloudevents.Event, attributeName string) interface{} {
|
|
var val interface{}
|
|
|
|
if a := spec.V1.Attribute(attributeName); a != nil { // Standard attribute
|
|
val = a.Get(event.Context)
|
|
} else {
|
|
val = event.Extensions()[attributeName]
|
|
}
|
|
|
|
if val == nil {
|
|
return nil
|
|
}
|
|
|
|
// Type cohercion
|
|
switch val.(type) {
|
|
case bool, int32, string:
|
|
return val
|
|
case int8:
|
|
return int32(val.(int8))
|
|
case uint8:
|
|
return int32(val.(uint8))
|
|
case int16:
|
|
return int32(val.(int16))
|
|
case uint16:
|
|
return int32(val.(uint16))
|
|
case uint32:
|
|
return int32(val.(uint32))
|
|
case int64:
|
|
return int32(val.(int64))
|
|
case uint64:
|
|
return int32(val.(uint64))
|
|
case time.Time:
|
|
return val.(time.Time).Format(time.RFC3339Nano)
|
|
case []byte:
|
|
return types.FormatBinary(val.([]byte))
|
|
}
|
|
return fmt.Sprintf("%v", val)
|
|
}
|
|
|
|
func ContainsAttribute(event cloudevents.Event, attributeName string) bool {
|
|
if attributeName == "specversion" || attributeName == "id" || attributeName == "source" || attributeName == "type" {
|
|
return true
|
|
}
|
|
|
|
if attr := spec.V1.Attribute(attributeName); attr != nil {
|
|
return attr.Get(event.Context) != nil
|
|
}
|
|
|
|
_, ok := event.Extensions()[attributeName]
|
|
return ok
|
|
}
|