59 lines
1.5 KiB
Go
59 lines
1.5 KiB
Go
|
|
package pana
|
||
|
|
|
||
|
|
import (
|
||
|
|
"unsafe"
|
||
|
|
|
||
|
|
ld "sourcery.dny.nu/longdistance"
|
||
|
|
)
|
||
|
|
|
||
|
|
// Has checks if an object has a specific property set.
|
||
|
|
//
|
||
|
|
// It handles JSON-LD keyword aliasses for id and type.
|
||
|
|
func Has[T ld.Internal](in *T, property string) bool {
|
||
|
|
if property == "id" {
|
||
|
|
property = ld.KeywordID
|
||
|
|
}
|
||
|
|
|
||
|
|
if property == "type" {
|
||
|
|
property = ld.KeywordType
|
||
|
|
}
|
||
|
|
|
||
|
|
return (*ld.Node)(unsafe.Pointer(in)).Has(property)
|
||
|
|
}
|
||
|
|
|
||
|
|
// IsReference indicates if this object is a reference.
|
||
|
|
//
|
||
|
|
// This means it only has the ID, and optionally a Type, set. You'll need to
|
||
|
|
// retrieve the object using the ID to get additional properties.
|
||
|
|
func IsReference[T ld.Internal](in *T) bool {
|
||
|
|
return (*ld.Node)(unsafe.Pointer(in)).IsSubjectReference()
|
||
|
|
}
|
||
|
|
|
||
|
|
// IsObject indicates if this object is a (partially) complete object.
|
||
|
|
//
|
||
|
|
// This means it has an ID, optionally a Type and at least one other
|
||
|
|
// property. It doesn't mean the object representation is complete, and you may
|
||
|
|
// need to retrieve the object using the ID to get additional properties.
|
||
|
|
func IsObjec[T ld.Internal](in *T) bool {
|
||
|
|
return (*ld.Node)(unsafe.Pointer(in)).IsSubject()
|
||
|
|
}
|
||
|
|
|
||
|
|
// Properties returns a set with an entry for each property set on an object.
|
||
|
|
//
|
||
|
|
// It handles JSON-LD keyword aliasses for id and type.
|
||
|
|
func Properties[T ld.Internal](in *T) map[string]struct{} {
|
||
|
|
s := (*ld.Node)(unsafe.Pointer(in)).PropertySet()
|
||
|
|
|
||
|
|
if _, ok := s[ld.KeywordID]; ok {
|
||
|
|
delete(s, ld.KeywordID)
|
||
|
|
s["id"] = struct{}{}
|
||
|
|
}
|
||
|
|
|
||
|
|
if _, ok := s[ld.KeywordType]; ok {
|
||
|
|
delete(s, ld.KeywordType)
|
||
|
|
s["type"] = struct{}{}
|
||
|
|
}
|
||
|
|
|
||
|
|
return s
|
||
|
|
}
|