2018-10-11 09:26:00 +00:00
package activitystreams
2017-09-11 21:10:56 +00:00
2018-06-09 11:06:55 +00:00
import (
2019-05-07 21:11:15 +00:00
"errors"
2018-06-09 12:05:46 +00:00
"time"
2019-12-03 11:47:27 +00:00
"unsafe"
2018-06-09 11:06:55 +00:00
)
2018-03-24 16:54:55 +00:00
// Activity Types
2017-09-11 21:10:56 +00:00
const (
2017-10-02 09:53:09 +00:00
AcceptType ActivityVocabularyType = "Accept"
AddType ActivityVocabularyType = "Add"
AnnounceType ActivityVocabularyType = "Announce"
ArriveType ActivityVocabularyType = "Arrive"
BlockType ActivityVocabularyType = "Block"
CreateType ActivityVocabularyType = "Create"
DeleteType ActivityVocabularyType = "Delete"
DislikeType ActivityVocabularyType = "Dislike"
FlagType ActivityVocabularyType = "Flag"
FollowType ActivityVocabularyType = "Follow"
IgnoreType ActivityVocabularyType = "Ignore"
InviteType ActivityVocabularyType = "Invite"
JoinType ActivityVocabularyType = "Join"
LeaveType ActivityVocabularyType = "Leave"
LikeType ActivityVocabularyType = "Like"
ListenType ActivityVocabularyType = "Listen"
MoveType ActivityVocabularyType = "Move"
OfferType ActivityVocabularyType = "Offer"
QuestionType ActivityVocabularyType = "Question"
RejectType ActivityVocabularyType = "Reject"
ReadType ActivityVocabularyType = "Read"
RemoveType ActivityVocabularyType = "Remove"
TentativeRejectType ActivityVocabularyType = "TentativeReject"
TentativeAcceptType ActivityVocabularyType = "TentativeAccept"
TravelType ActivityVocabularyType = "Travel"
UndoType ActivityVocabularyType = "Undo"
UpdateType ActivityVocabularyType = "Update"
ViewType ActivityVocabularyType = "View"
2017-09-11 21:10:56 +00:00
)
2019-05-16 09:08:27 +00:00
type ActivityVocabularyTypes [ ] ActivityVocabularyType
func ( a ActivityVocabularyTypes ) Contains ( typ ActivityVocabularyType ) bool {
for _ , v := range a {
if v == typ {
return true
}
}
return false
}
2019-05-16 15:14:30 +00:00
// ContentManagementActivityTypes use case primarily deals with activities that involve the creation, modification or deletion of content.
// This includes, for instance, activities such as "John created a new note", "Sally updated an article", and "Joe deleted the photo".
2019-05-16 09:08:27 +00:00
var ContentManagementActivityTypes = ActivityVocabularyTypes {
2018-11-01 14:54:23 +00:00
CreateType ,
DeleteType ,
UpdateType ,
}
2019-05-16 15:14:30 +00:00
// CollectionManagementActivityTypes use case primarily deals with activities involving the management of content within collections.
// Examples of collections include things like folders, albums, friend lists, etc.
// This includes, for instance, activities such as "Sally added a file to Folder A", "John moved the file from Folder A to Folder B", etc.
2019-05-16 09:08:27 +00:00
var CollectionManagementActivityTypes = ActivityVocabularyTypes {
2018-11-01 14:54:23 +00:00
AddType ,
MoveType ,
RemoveType ,
}
2019-05-16 15:14:30 +00:00
// ReactionsActivityTypes use case primarily deals with reactions to content.
// This can include activities such as liking or disliking content, ignoring updates, flagging content as being inappropriate, accepting or rejecting objects, etc.
2019-05-16 09:08:27 +00:00
var ReactionsActivityTypes = ActivityVocabularyTypes {
2018-11-01 14:54:23 +00:00
AcceptType ,
BlockType ,
DislikeType ,
FlagType ,
IgnoreType ,
LikeType ,
RejectType ,
TentativeAcceptType ,
TentativeRejectType ,
}
2019-05-16 15:14:30 +00:00
// EventRSVPActivityTypes use case primarily deals with invitations to events and RSVP type responses.
2019-05-16 09:08:27 +00:00
var EventRSVPActivityTypes = ActivityVocabularyTypes {
2018-11-01 14:54:23 +00:00
AcceptType ,
IgnoreType ,
InviteType ,
RejectType ,
TentativeAcceptType ,
TentativeRejectType ,
}
2019-05-16 15:14:30 +00:00
// GroupManagementActivityTypes use case primarily deals with management of groups.
// It can include, for instance, activities such as "John added Sally to Group A", "Sally joined Group A", "Joe left Group A", etc.
2019-05-16 09:08:27 +00:00
var GroupManagementActivityTypes = ActivityVocabularyTypes {
2018-11-01 14:54:23 +00:00
AddType ,
JoinType ,
LeaveType ,
RemoveType ,
}
2019-05-16 15:14:30 +00:00
// ContentExperienceActivityTypes use case primarily deals with describing activities involving listening to, reading, or viewing content.
// For instance, "Sally read the article", "Joe listened to the song".
2019-05-16 09:08:27 +00:00
var ContentExperienceActivityTypes = ActivityVocabularyTypes {
2019-05-16 15:06:31 +00:00
ListenType ,
ReadType ,
ViewType ,
2018-11-01 14:54:23 +00:00
}
2019-05-16 15:14:30 +00:00
// GeoSocialEventsActivityTypes use case primarily deals with activities involving geo-tagging type activities.
// For instance, it can include activities such as "Joe arrived at work", "Sally left work", and "John is travel from home to work".
2019-05-16 09:08:27 +00:00
var GeoSocialEventsActivityTypes = ActivityVocabularyTypes {
2018-11-01 14:54:23 +00:00
ArriveType ,
LeaveType ,
TravelType ,
}
2019-05-16 15:14:30 +00:00
// NotificationActivityTypes use case primarily deals with calling attention to particular objects or notifications.
2019-05-16 09:08:27 +00:00
var NotificationActivityTypes = ActivityVocabularyTypes {
2018-11-01 14:54:23 +00:00
AnnounceType ,
}
2019-05-16 15:14:30 +00:00
// QuestionActivityTypes use case primarily deals with representing inquiries of any type.
// See 5.4 Representing Questions for more information.
2019-05-16 09:08:27 +00:00
var QuestionActivityTypes = ActivityVocabularyTypes {
2018-11-01 14:54:23 +00:00
QuestionType ,
}
2019-05-16 15:14:30 +00:00
// RelationshipManagementActivityTypes use case primarily deals with representing activities involving the management of interpersonal and social relationships
// (e.g. friend requests, management of social network, etc). See 5.2 Representing Relationships Between Entities for more information.
2019-05-16 09:08:27 +00:00
var RelationshipManagementActivityTypes = ActivityVocabularyTypes {
2018-11-01 14:54:23 +00:00
AcceptType ,
AddType ,
BlockType ,
CreateType ,
DeleteType ,
FollowType ,
IgnoreType ,
InviteType ,
RejectType ,
}
2019-05-16 15:14:30 +00:00
// NegatingActivityTypes use case primarily deals with the ability to redact previously completed activities.
// See 5.5 Inverse Activities and "Undo" for more information.
2019-05-16 09:08:27 +00:00
var NegatingActivityTypes = ActivityVocabularyTypes {
2018-11-01 14:54:23 +00:00
UndoType ,
}
2019-05-16 15:14:30 +00:00
// OffersActivityTypes use case deals with activities involving offering one object to another.
// It can include, for instance, activities such as "Company A is offering a discount on purchase of Product Z to Sally", "Sally is offering to add a File to Folder A", etc.
2019-05-16 09:08:27 +00:00
var OffersActivityTypes = ActivityVocabularyTypes {
2018-11-01 14:54:23 +00:00
OfferType ,
}
2019-05-16 15:14:30 +00:00
2019-05-16 09:08:27 +00:00
var IntransitiveActivityTypes = ActivityVocabularyTypes {
2018-11-04 19:31:04 +00:00
ArriveType ,
TravelType ,
QuestionType ,
}
2019-05-16 15:14:30 +00:00
2019-05-16 09:08:27 +00:00
var ActivityTypes = ActivityVocabularyTypes {
2017-09-11 21:10:56 +00:00
AcceptType ,
AddType ,
AnnounceType ,
BlockType ,
CreateType ,
DeleteType ,
DislikeType ,
FlagType ,
FollowType ,
IgnoreType ,
InviteType ,
JoinType ,
LeaveType ,
LikeType ,
ListenType ,
MoveType ,
OfferType ,
RejectType ,
ReadType ,
RemoveType ,
TentativeRejectType ,
TentativeAcceptType ,
UndoType ,
UpdateType ,
ViewType ,
}
2019-05-26 20:25:44 +00:00
// HasRecipients is an interface implemented by activities to return their audience
// for further propagation
type HasRecipients interface {
// Recipients is a method that should do a recipients de-duplication step and then return
// the remaining recipients
Recipients ( ) ItemCollection
2019-11-24 09:59:34 +00:00
Clean ( )
2019-05-26 20:25:44 +00:00
}
2018-07-18 15:39:27 +00:00
// Activity is a subtype of Object that describes some form of action that may happen,
2018-10-18 09:48:02 +00:00
// is currently happening, or has already happened.
2018-06-09 12:05:46 +00:00
// The Activity type itself serves as an abstract base type for all types of activities.
// It is important to note that the Activity type itself does not carry any specific semantics
2018-10-18 09:48:02 +00:00
// about the kind of action being taken.
2018-06-09 12:05:46 +00:00
type Activity struct {
2018-11-23 14:22:56 +00:00
Parent
2018-10-24 09:28:55 +00:00
// Actor describes one or more entities that either performed or are expected to perform the activity.
2018-07-18 15:39:27 +00:00
// Any single activity can have multiple actors. The actor may be specified using an indirect Link.
2018-10-04 18:33:32 +00:00
Actor Item ` jsonld:"actor,omitempty" `
2018-10-24 09:28:55 +00:00
// Target describes the indirect object, or target, of the activity.
2017-09-16 17:53:11 +00:00
// The precise meaning of the target is largely dependent on the type of action being described
2018-10-18 09:48:02 +00:00
// but will often be the object of the English preposition "to".
2017-09-16 17:53:11 +00:00
// For instance, in the activity "John added a movie to his wishlist",
2018-10-18 09:48:02 +00:00
// the target of the activity is John's wishlist. An activity can have more than one target.
2018-10-04 18:33:32 +00:00
Target Item ` jsonld:"target,omitempty" `
2018-10-24 09:28:55 +00:00
// Result describes the result of the activity. For instance, if a particular action results in the creation
2018-10-18 09:48:02 +00:00
// of a new resource, the result property can be used to describe that new resource.
2018-10-04 18:33:32 +00:00
Result Item ` jsonld:"result,omitempty" `
2018-10-24 09:28:55 +00:00
// Origin describes an indirect object of the activity from which the activity is directed.
2017-09-16 17:53:11 +00:00
// The precise meaning of the origin is the object of the English preposition "from".
// For instance, in the activity "John moved an item to List B from List A", the origin of the activity is "List A".
2018-10-04 18:33:32 +00:00
Origin Item ` jsonld:"origin,omitempty" `
2018-10-24 09:28:55 +00:00
// Instrument identifies one or more objects used (or to be used) in the completion of an Activity.
Instrument Item ` jsonld:"instrument,omitempty" `
// Object When used within an Activity, describes the direct object of the activity.
2017-09-12 15:46:43 +00:00
// For instance, in the activity "John added a movie to his wishlist",
2018-10-18 09:48:02 +00:00
// the object of the activity is the movie added.
2017-09-12 15:46:43 +00:00
// When used within a Relationship describes the entity to which the subject is related.
2018-10-04 18:33:32 +00:00
Object Item ` jsonld:"object,omitempty" `
2017-09-11 21:10:56 +00:00
}
2018-06-09 12:05:46 +00:00
// IntransitiveActivity Instances of IntransitiveActivity are a subtype of Activity representing intransitive actions.
// The object property is therefore inappropriate for these activities.
type IntransitiveActivity struct {
2018-11-23 14:22:56 +00:00
Parent
2018-10-24 09:28:55 +00:00
// Actor describes one or more entities that either performed or are expected to perform the activity.
2018-07-18 15:39:27 +00:00
// Any single activity can have multiple actors. The actor may be specified using an indirect Link.
2018-06-09 12:05:46 +00:00
Actor Actor ` jsonld:"actor,omitempty" `
2018-10-24 09:28:55 +00:00
// Target describes the indirect object, or target, of the activity.
2018-06-09 12:05:46 +00:00
// The precise meaning of the target is largely dependent on the type of action being described
2018-10-18 09:48:02 +00:00
// but will often be the object of the English preposition "to".
2018-06-09 12:05:46 +00:00
// For instance, in the activity "John added a movie to his wishlist",
2018-10-18 09:48:02 +00:00
// the target of the activity is John's wishlist. An activity can have more than one target.
2018-10-04 18:33:32 +00:00
Target Item ` jsonld:"target,omitempty" `
2018-10-24 09:28:55 +00:00
// Result describes the result of the activity. For instance, if a particular action results in the creation
2018-10-18 09:48:02 +00:00
// of a new resource, the result property can be used to describe that new resource.
2018-10-04 18:33:32 +00:00
Result Item ` jsonld:"result,omitempty" `
2018-10-24 09:28:55 +00:00
// Origin describes an indirect object of the activity from which the activity is directed.
2018-06-09 12:05:46 +00:00
// The precise meaning of the origin is the object of the English preposition "from".
// For instance, in the activity "John moved an item to List B from List A", the origin of the activity is "List A".
2018-10-04 18:33:32 +00:00
Origin Item ` jsonld:"origin,omitempty" `
2018-10-24 09:28:55 +00:00
// Instrument identifies one or more objects used (or to be used) in the completion of an Activity.
Instrument Item ` jsonld:"instrument,omitempty" `
2018-06-09 12:05:46 +00:00
}
2017-09-16 17:53:11 +00:00
type (
2018-03-24 16:54:55 +00:00
// Accept indicates that the actor accepts the object. The target property can be used in certain circumstances to indicate
2018-10-18 09:48:02 +00:00
// the context into which the object has been accepted.
2019-12-01 18:36:46 +00:00
Accept = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Add indicates that the actor has added the object to the target. If the target property is not explicitly specified,
2018-10-18 09:48:02 +00:00
// the target would need to be determined implicitly by context.
2017-09-16 17:53:11 +00:00
// The origin can be used to identify the context from which the object originated.
2019-12-01 18:36:46 +00:00
Add = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Announce indicates that the actor is calling the target's attention the object.
2017-09-16 17:53:11 +00:00
// The origin typically has no defined meaning.
2019-12-01 18:36:46 +00:00
Announce = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Arrive is an IntransitiveActivity that indicates that the actor has arrived at the location.
2017-09-16 17:53:11 +00:00
// The origin can be used to identify the context from which the actor originated.
// The target typically has no defined meaning.
2019-12-01 18:36:46 +00:00
Arrive = IntransitiveActivity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Block indicates that the actor is blocking the object. Blocking is a stronger form of Ignore.
2017-09-16 17:53:11 +00:00
// The typical use is to support social systems that allow one user to block activities or content of other users.
// The target and origin typically have no defined meaning.
2019-12-01 18:36:46 +00:00
Block = Ignore
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Create indicates that the actor has created the object.
2019-12-01 18:36:46 +00:00
Create = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Delete indicates that the actor has deleted the object.
2017-09-16 17:53:11 +00:00
// If specified, the origin indicates the context from which the object was deleted.
2019-12-01 18:36:46 +00:00
Delete = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Dislike indicates that the actor dislikes the object.
2019-12-01 18:36:46 +00:00
Dislike = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Flag indicates that the actor is "flagging" the object.
2017-09-16 17:53:11 +00:00
// Flagging is defined in the sense common to many social platforms as reporting content as being
2018-10-18 09:48:02 +00:00
// inappropriate for any number of reasons.
2019-12-01 18:36:46 +00:00
Flag = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Follow indicates that the actor is "following" the object. Following is defined in the sense typically used within
2018-10-18 09:48:02 +00:00
// Social systems in which the actor is interested in any activity performed by or on the object.
2017-09-16 17:53:11 +00:00
// The target and origin typically have no defined meaning.
2019-12-01 18:36:46 +00:00
Follow = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Ignore indicates that the actor is ignoring the object. The target and origin typically have no defined meaning.
2019-12-01 18:36:46 +00:00
Ignore = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Invite is a specialization of Offer in which the actor is extending an invitation for the object to the target.
2019-12-01 18:36:46 +00:00
Invite = Offer
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Join indicates that the actor has joined the object. The target and origin typically have no defined meaning.
2019-12-01 18:36:46 +00:00
Join = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Leave indicates that the actor has left the object. The target and origin typically have no meaning.
2019-12-01 18:36:46 +00:00
Leave = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Like indicates that the actor likes, recommends or endorses the object.
2017-09-16 17:53:11 +00:00
// The target and origin typically have no defined meaning.
2019-12-01 18:36:46 +00:00
Like = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Listen inherits all properties from Activity.
2019-12-01 18:36:46 +00:00
Listen = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Move indicates that the actor has moved object from origin to target.
2017-09-16 17:53:11 +00:00
// If the origin or target are not specified, either can be determined by context.
2019-12-01 18:36:46 +00:00
Move = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Offer indicates that the actor is offering the object.
2017-09-16 17:53:11 +00:00
// If specified, the target indicates the entity to which the object is being offered.
2019-12-01 18:36:46 +00:00
Offer = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Reject indicates that the actor is rejecting the object. The target and origin typically have no defined meaning.
2019-12-01 18:36:46 +00:00
Reject = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Read indicates that the actor has read the object.
2019-12-01 18:36:46 +00:00
Read = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Remove indicates that the actor is removing the object. If specified,
2018-10-18 09:48:02 +00:00
// the origin indicates the context from which the object is being removed.
2019-12-01 18:36:46 +00:00
Remove = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// TentativeReject is a specialization of Reject in which the rejection is considered tentative.
2019-12-01 18:36:46 +00:00
TentativeReject = Reject
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// TentativeAccept is a specialization of Accept indicating that the acceptance is tentative.
2019-12-01 18:36:46 +00:00
TentativeAccept = Accept
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Travel indicates that the actor is traveling to target from origin.
2017-09-16 17:53:11 +00:00
// Travel is an IntransitiveObject whose actor specifies the direct object.
// If the target or origin are not specified, either can be determined by context.
2019-12-01 18:36:46 +00:00
Travel = IntransitiveActivity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Undo indicates that the actor is undoing the object. In most cases, the object will be an Activity describing
2018-10-18 09:48:02 +00:00
// some previously performed action (for instance, a person may have previously "liked" an article but,
// for whatever reason, might choose to undo that like at some later point in time).
2017-09-16 17:53:11 +00:00
// The target and origin typically have no defined meaning.
2019-10-13 21:32:32 +00:00
Undo = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Update indicates that the actor has updated the object. Note, however, that this vocabulary does not define a mechanism
2018-10-18 09:48:02 +00:00
// for describing the actual set of modifications made to object.
2017-09-16 17:53:11 +00:00
// The target and origin typically have no defined meaning.
2019-12-01 18:36:46 +00:00
Update = Activity
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// View indicates that the actor has viewed the object.
2019-12-01 18:36:46 +00:00
View = Activity
2017-09-16 17:53:11 +00:00
)
2017-09-12 16:53:41 +00:00
2018-03-24 16:54:55 +00:00
// Question represents a question being asked. Question objects are an extension of IntransitiveActivity.
2017-09-12 16:53:41 +00:00
// That is, the Question object is an Activity, but the direct object is the question
2018-10-18 09:48:02 +00:00
// itself and therefore it would not contain an object property.
2017-09-12 16:53:41 +00:00
// Either of the anyOf and oneOf properties may be used to express possible answers,
2018-10-18 09:48:02 +00:00
// but a Question object must not have both properties.
2017-09-12 16:53:41 +00:00
type Question struct {
2018-10-24 09:28:55 +00:00
// ID providesthe globally unique identifier for an Activity Pub Object or Link.
2018-06-09 12:05:46 +00:00
ID ObjectID ` jsonld:"id,omitempty" `
2018-10-24 09:28:55 +00:00
// Type identifies the Activity Pub Object or Link type. Multiple values may be specified.
2018-06-09 12:05:46 +00:00
Type ActivityVocabularyType ` jsonld:"type,omitempty" `
2018-10-24 09:28:55 +00:00
// Name a simple, human-readable, plain-text name for the object.
2018-06-09 12:05:46 +00:00
// HTML markup MUST NOT be included. The name MAY be expressed using multiple language-tagged values.
2019-02-21 16:54:11 +00:00
Name NaturalLanguageValues ` jsonld:"name,omitempty,collapsible" `
2018-10-24 09:28:55 +00:00
// Attachment identifies a resource attached or related to an object that potentially requires special handling.
2018-06-09 12:05:46 +00:00
// The intent is to provide a model that is at least semantically similar to attachments in email.
2018-10-04 18:33:32 +00:00
Attachment Item ` jsonld:"attachment,omitempty" `
2018-10-24 09:28:55 +00:00
// AttributedTo identifies one or more entities to which this object is attributed. The attributed entities might not be Actors.
2018-06-09 12:05:46 +00:00
// For instance, an object might be attributed to the completion of another activity.
2018-10-04 18:33:32 +00:00
AttributedTo Item ` jsonld:"attributedTo,omitempty" `
2018-10-24 09:28:55 +00:00
// Audience identifies one or more entities that represent the total population of entities
2018-10-18 09:48:02 +00:00
// for which the object can considered to be relevant.
2018-10-04 18:33:32 +00:00
Audience Item ` jsonld:"audience,omitempty" `
2018-10-24 09:28:55 +00:00
// Content the content or textual representation of the Activity Pub Object encoded as a JSON string.
2018-06-09 12:05:46 +00:00
// By default, the value of content is HTML.
// The mediaType property can be used in the object to indicate a different content type.
// (The content MAY be expressed using multiple language-tagged values.)
2019-02-21 16:54:11 +00:00
Content NaturalLanguageValues ` jsonld:"content,omitempty,collapsible" `
2018-10-24 09:28:55 +00:00
// Context identifies the context within which the object exists or an activity was performed.
2018-06-09 12:05:46 +00:00
// The notion of "context" used is intentionally vague.
// The intended function is to serve as a means of grouping objects and activities that share a
2018-10-18 09:48:02 +00:00
// common originating context or purpose. An example could be all activities relating to a common project or event.
2018-10-04 18:33:32 +00:00
Context Item ` jsonld:"context,omitempty" `
2018-10-24 09:28:55 +00:00
// EndTime the date and time describing the actual or expected ending time of the object.
2018-06-09 12:05:46 +00:00
// When used with an Activity object, for instance, the endTime property specifies the moment
2018-10-18 09:48:02 +00:00
// the activity concluded or is expected to conclude.
2018-06-09 12:05:46 +00:00
EndTime time . Time ` jsonld:"endTime,omitempty" `
2018-10-24 09:28:55 +00:00
// Generator identifies the entity (e.g. an application) that generated the object.
2018-10-04 18:33:32 +00:00
Generator Item ` jsonld:"generator,omitempty" `
2018-10-24 09:28:55 +00:00
// Icon indicates an entity that describes an icon for this object.
2018-06-09 12:05:46 +00:00
// The image should have an aspect ratio of one (horizontal) to one (vertical)
2018-10-18 09:48:02 +00:00
// and should be suitable for presentation at a small size.
2018-10-11 19:47:31 +00:00
Icon Item ` jsonld:"icon,omitempty" `
2018-10-24 09:28:55 +00:00
// Image indicates an entity that describes an image for this object.
2018-06-09 12:05:46 +00:00
// Unlike the icon property, there are no aspect ratio or display size limitations assumed.
2018-10-11 19:47:31 +00:00
Image Item ` jsonld:"image,omitempty" `
2018-10-24 09:28:55 +00:00
// InReplyTo indicates one or more entities for which this object is considered a response.
2018-10-04 18:33:32 +00:00
InReplyTo Item ` jsonld:"inReplyTo,omitempty" `
2018-10-24 09:28:55 +00:00
// Location indicates one or more physical or logical locations associated with the object.
2018-10-04 18:33:32 +00:00
Location Item ` jsonld:"location,omitempty" `
2018-10-24 09:28:55 +00:00
// Preview identifies an entity that providesa preview of this object.
2018-10-04 18:33:32 +00:00
Preview Item ` jsonld:"preview,omitempty" `
2018-10-24 09:28:55 +00:00
// Published the date and time at which the object was published
2018-06-09 12:05:46 +00:00
Published time . Time ` jsonld:"published,omitempty" `
2018-10-24 09:28:55 +00:00
// Replies identifies a Collection containing objects considered to be responses to this object.
2018-10-04 18:33:32 +00:00
Replies Item ` jsonld:"replies,omitempty" `
2018-10-24 09:28:55 +00:00
// StartTime the date and time describing the actual or expected starting time of the object.
2018-06-09 12:05:46 +00:00
// When used with an Activity object, for instance, the startTime property specifies
2018-10-18 09:48:02 +00:00
// the moment the activity began or is scheduled to begin.
2018-06-09 12:05:46 +00:00
StartTime time . Time ` jsonld:"startTime,omitempty" `
2018-10-24 09:28:55 +00:00
// Summary a natural language summarization of the object encoded as HTML.
2018-06-09 12:05:46 +00:00
// *Multiple language tagged summaries may be provided.)
2019-02-21 16:54:11 +00:00
Summary NaturalLanguageValues ` jsonld:"summary,omitempty,collapsible" `
2018-10-24 09:28:55 +00:00
// Tag One or more "tags" that have been associated with an objects. A tag can be any kind of Activity Pub Object.
2018-06-09 12:05:46 +00:00
// The key difference between attachment and tag is that the former implies association by inclusion,
2018-10-18 09:48:02 +00:00
// while the latter implies associated by reference.
2018-10-04 18:33:32 +00:00
Tag Item ` jsonld:"tag,omitempty" `
2018-10-24 09:28:55 +00:00
// Updated the date and time at which the object was updated
2018-06-09 12:05:46 +00:00
Updated time . Time ` jsonld:"updated,omitempty" `
2018-10-24 09:28:55 +00:00
// URL identifies one or more links to representations of the object
2018-06-09 12:05:46 +00:00
URL LinkOrURI ` jsonld:"url,omitempty" `
2018-10-24 09:28:55 +00:00
// To identifies an entity considered to be part of the public primary audience of an Activity Pub Object
2018-10-04 18:33:32 +00:00
To ItemCollection ` jsonld:"to,omitempty" `
2018-10-24 09:28:55 +00:00
// Bto identifies an Activity Pub Object that is part of the private primary audience of this Activity Pub Object.
2019-11-24 08:28:32 +00:00
Bto ItemCollection ` jsonld:"bto,omitempty" `
2018-10-24 09:28:55 +00:00
// CC identifies an Activity Pub Object that is part of the public secondary audience of this Activity Pub Object.
2018-10-04 18:33:32 +00:00
CC ItemCollection ` jsonld:"cc,omitempty" `
2018-10-24 09:28:55 +00:00
// BCC identifies one or more Objects that are part of the private secondary audience of this Activity Pub Object.
2019-11-24 08:28:32 +00:00
BCC ItemCollection ` jsonld:"bcc,omitempty" `
2018-10-24 09:28:55 +00:00
// Duration When the object describes a time-bound resource, such as an audio or video, a meeting, etc,
2018-10-18 09:48:02 +00:00
// the duration property indicates the object's approximate duration.
2018-06-09 12:05:46 +00:00
// The value must be expressed as an xsd:duration as defined by [ xmlschema11-2],
2018-10-18 09:48:02 +00:00
// section 3.3.6 (e.g. a period of 5 seconds is represented as "PT5S").
2018-06-09 12:05:46 +00:00
Duration time . Duration ` jsonld:"duration,omitempty" `
2018-10-24 09:28:55 +00:00
// Actor describes one or more entities that either performed or are expected to perform the activity.
2018-07-18 15:39:27 +00:00
// Any single activity can have multiple actors. The actor may be specified using an indirect Link.
2018-06-09 12:05:46 +00:00
Actor Actor ` jsonld:"actor,omitempty" `
2018-10-24 09:28:55 +00:00
// Target describes the indirect object, or target, of the activity.
2018-06-09 12:05:46 +00:00
// The precise meaning of the target is largely dependent on the type of action being described
2018-10-18 09:48:02 +00:00
// but will often be the object of the English preposition "to".
2018-06-09 12:05:46 +00:00
// For instance, in the activity "John added a movie to his wishlist",
2018-10-18 09:48:02 +00:00
// the target of the activity is John's wishlist. An activity can have more than one target.
2018-10-04 18:33:32 +00:00
Target Item ` jsonld:"target,omitempty" `
2018-10-24 09:28:55 +00:00
// Result describes the result of the activity. For instance, if a particular action results in the creation
2018-10-18 09:48:02 +00:00
// of a new resource, the result property can be used to describe that new resource.
2018-10-04 18:33:32 +00:00
Result Item ` jsonld:"result,omitempty" `
2018-10-24 09:28:55 +00:00
// Origin describes an indirect object of the activity from which the activity is directed.
2018-06-09 12:05:46 +00:00
// The precise meaning of the origin is the object of the English preposition "from".
// For instance, in the activity "John moved an item to List B from List A", the origin of the activity is "List A".
2018-10-04 18:33:32 +00:00
Origin Item ` jsonld:"origin,omitempty" `
2018-10-24 09:28:55 +00:00
// Instrument identifies one or more objects used (or to be used) in the completion of an Activity.
Instrument Item ` jsonld:"instrument,omitempty" `
// OneOf identifies an exclusive option for a Question. Use of oneOf implies that the Question
2018-10-18 09:48:02 +00:00
// can have only a single answer. To indicate that a Question can have multiple answers, use anyOf.
2018-10-04 18:33:32 +00:00
OneOf Item ` jsonld:"oneOf,omitempty" `
2018-10-24 09:28:55 +00:00
// AnyOf identifies an inclusive option for a Question. Use of anyOf implies that the Question can have multiple answers.
2017-09-12 16:53:41 +00:00
// To indicate that a Question can have only one answer, use oneOf.
2018-10-04 18:33:32 +00:00
AnyOf Item ` jsonld:"anyOf,omitempty" `
2018-10-24 09:28:55 +00:00
// Closed indicates that a question has been closed, and answers are no longer accepted.
2017-10-02 09:53:09 +00:00
Closed bool ` jsonld:"closed,omitempty" `
2017-09-12 16:53:41 +00:00
}
2018-03-25 18:54:51 +00:00
// AcceptNew initializes an Accept activity
2018-10-04 18:33:32 +00:00
func AcceptNew ( id ObjectID , ob Item ) * Accept {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , AcceptType , ob )
2017-09-12 16:53:41 +00:00
o := Accept ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// AddNew initializes an Add activity
2018-10-04 18:33:32 +00:00
func AddNew ( id ObjectID , ob Item , trgt Item ) * Add {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , AddType , ob )
2017-09-12 16:53:41 +00:00
o := Add ( * a )
2018-03-27 15:40:25 +00:00
o . Target = trgt
2017-09-12 16:53:41 +00:00
return & o
}
2018-03-25 18:54:51 +00:00
// AnnounceNew initializes an Announce activity
2018-10-04 18:33:32 +00:00
func AnnounceNew ( id ObjectID , ob Item ) * Announce {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , AnnounceType , ob )
2017-09-12 16:53:41 +00:00
o := Announce ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// ArriveNew initializes an Arrive activity
2018-03-27 13:06:06 +00:00
func ArriveNew ( id ObjectID ) * Arrive {
2017-09-12 16:53:41 +00:00
a := IntransitiveActivityNew ( id , ArriveType )
o := Arrive ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// BlockNew initializes a Block activity
2018-10-04 18:33:32 +00:00
func BlockNew ( id ObjectID , ob Item ) * Block {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , BlockType , ob )
2017-09-12 16:53:41 +00:00
o := Block ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// CreateNew initializes a Create activity
2018-10-04 18:33:32 +00:00
func CreateNew ( id ObjectID , ob Item ) * Create {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , CreateType , ob )
2017-09-12 16:53:41 +00:00
o := Create ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// DeleteNew initializes a Delete activity
2018-10-04 18:33:32 +00:00
func DeleteNew ( id ObjectID , ob Item ) * Delete {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , DeleteType , ob )
2017-09-12 16:53:41 +00:00
o := Delete ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// DislikeNew initializes a Dislike activity
2018-10-04 18:33:32 +00:00
func DislikeNew ( id ObjectID , ob Item ) * Dislike {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , DislikeType , ob )
2017-09-12 16:53:41 +00:00
o := Dislike ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// FlagNew initializes a Flag activity
2018-10-04 18:33:32 +00:00
func FlagNew ( id ObjectID , ob Item ) * Flag {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , FlagType , ob )
2017-09-12 16:53:41 +00:00
o := Flag ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// FollowNew initializes a Follow activity
2018-10-04 18:33:32 +00:00
func FollowNew ( id ObjectID , ob Item ) * Follow {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , FollowType , ob )
2017-09-12 16:53:41 +00:00
o := Follow ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// IgnoreNew initializes an Ignore activity
2018-10-04 18:33:32 +00:00
func IgnoreNew ( id ObjectID , ob Item ) * Ignore {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , IgnoreType , ob )
2017-09-12 16:53:41 +00:00
o := Ignore ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// InviteNew initializes an Invite activity
2018-10-04 18:33:32 +00:00
func InviteNew ( id ObjectID , ob Item ) * Invite {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , InviteType , ob )
2017-09-12 16:53:41 +00:00
o := Invite ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// JoinNew initializes a Join activity
2018-10-04 18:33:32 +00:00
func JoinNew ( id ObjectID , ob Item ) * Join {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , JoinType , ob )
2017-09-12 16:53:41 +00:00
o := Join ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// LeaveNew initializes a Leave activity
2018-10-04 18:33:32 +00:00
func LeaveNew ( id ObjectID , ob Item ) * Leave {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , LeaveType , ob )
2017-09-12 16:53:41 +00:00
o := Leave ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// LikeNew initializes a Like activity
2018-10-04 18:33:32 +00:00
func LikeNew ( id ObjectID , ob Item ) * Like {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , LikeType , ob )
2017-09-12 16:53:41 +00:00
o := Like ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// ListenNew initializes a Listen activity
2018-10-04 18:33:32 +00:00
func ListenNew ( id ObjectID , ob Item ) * Listen {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , ListenType , ob )
2017-09-12 16:53:41 +00:00
o := Listen ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// MoveNew initializes a Move activity
2018-10-04 18:33:32 +00:00
func MoveNew ( id ObjectID , ob Item ) * Move {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , MoveType , ob )
2017-09-12 16:53:41 +00:00
o := Move ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// OfferNew initializes an Offer activity
2018-10-04 18:33:32 +00:00
func OfferNew ( id ObjectID , ob Item ) * Offer {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , OfferType , ob )
2017-09-12 16:53:41 +00:00
o := Offer ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// RejectNew initializes a Reject activity
2018-10-04 18:33:32 +00:00
func RejectNew ( id ObjectID , ob Item ) * Reject {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , RejectType , ob )
2017-09-12 16:53:41 +00:00
o := Reject ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// ReadNew initializes a Read activity
2018-10-04 18:33:32 +00:00
func ReadNew ( id ObjectID , ob Item ) * Read {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , ReadType , ob )
2017-09-12 16:53:41 +00:00
o := Read ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// RemoveNew initializes a Remove activity
2018-10-04 18:33:32 +00:00
func RemoveNew ( id ObjectID , ob Item , trgt Item ) * Remove {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , RemoveType , ob )
2017-09-12 16:53:41 +00:00
o := Remove ( * a )
2018-03-27 15:40:25 +00:00
o . Target = trgt
2017-09-12 16:53:41 +00:00
return & o
}
2018-03-25 18:54:51 +00:00
// TentativeRejectNew initializes a TentativeReject activity
2018-10-04 18:33:32 +00:00
func TentativeRejectNew ( id ObjectID , ob Item ) * TentativeReject {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , TentativeRejectType , ob )
2017-09-12 16:53:41 +00:00
o := TentativeReject ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// TentativeAcceptNew initializes a TentativeAccept activity
2018-10-04 18:33:32 +00:00
func TentativeAcceptNew ( id ObjectID , ob Item ) * TentativeAccept {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , TentativeAcceptType , ob )
2017-09-12 16:53:41 +00:00
o := TentativeAccept ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// TravelNew initializes a Travel activity
2018-03-27 13:06:06 +00:00
func TravelNew ( id ObjectID ) * Travel {
2017-09-12 16:53:41 +00:00
a := IntransitiveActivityNew ( id , TravelType )
o := Travel ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// UndoNew initializes an Undo activity
2018-10-04 18:33:32 +00:00
func UndoNew ( id ObjectID , ob Item ) * Undo {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , UndoType , ob )
2017-09-12 16:53:41 +00:00
o := Undo ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// UpdateNew initializes an Update activity
2018-10-04 18:33:32 +00:00
func UpdateNew ( id ObjectID , ob Item ) * Update {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , UpdateType , ob )
2018-10-02 09:22:38 +00:00
u := Update ( * a )
return & u
2017-09-12 16:53:41 +00:00
}
2018-03-25 18:54:51 +00:00
// ViewNew initializes a View activity
2018-10-04 18:33:32 +00:00
func ViewNew ( id ObjectID , ob Item ) * View {
2017-10-03 20:46:03 +00:00
a := ActivityNew ( id , ViewType , ob )
2017-09-12 16:53:41 +00:00
o := View ( * a )
return & o
}
2018-03-25 18:54:51 +00:00
// QuestionNew initializes a Question activity
2018-03-27 13:06:06 +00:00
func QuestionNew ( id ObjectID ) * Question {
2018-06-09 12:05:46 +00:00
q := Question { ID : id , Type : QuestionType }
2019-02-21 16:54:11 +00:00
q . Name = NaturalLanguageValuesNew ( )
q . Content = NaturalLanguageValuesNew ( )
2018-06-09 12:05:46 +00:00
return & q
2017-09-12 16:53:41 +00:00
}
2018-03-25 18:54:51 +00:00
// ActivityNew initializes a basic activity
2018-10-04 18:33:32 +00:00
func ActivityNew ( id ObjectID , typ ActivityVocabularyType , ob Item ) * Activity {
2019-05-16 09:08:27 +00:00
if ! ActivityTypes . Contains ( typ ) {
2018-06-09 12:05:46 +00:00
typ = ActivityType
2017-09-11 21:10:56 +00:00
}
2018-11-23 14:22:56 +00:00
a := Activity { Parent : Parent { ID : id , Type : typ } }
2019-02-21 16:54:11 +00:00
a . Name = NaturalLanguageValuesNew ( )
a . Content = NaturalLanguageValuesNew ( )
2017-09-12 15:26:37 +00:00
2017-10-03 20:46:03 +00:00
a . Object = ob
return & a
2017-09-12 15:26:37 +00:00
}
2018-03-25 18:54:51 +00:00
// IntransitiveActivityNew initializes a intransitive activity
2018-06-09 12:05:46 +00:00
func IntransitiveActivityNew ( id ObjectID , typ ActivityVocabularyType ) * IntransitiveActivity {
2019-05-16 09:08:27 +00:00
if ! IntransitiveActivityTypes . Contains ( typ ) {
2018-06-09 12:05:46 +00:00
typ = IntransitiveActivityType
2017-09-12 15:26:37 +00:00
}
2018-11-23 14:22:56 +00:00
i := IntransitiveActivity { Parent : Parent { ID : id , Type : typ } }
2019-02-21 16:54:11 +00:00
i . Name = NaturalLanguageValuesNew ( )
i . Content = NaturalLanguageValuesNew ( )
2017-09-11 21:10:56 +00:00
2018-06-09 12:05:46 +00:00
return & i
2017-09-11 21:10:56 +00:00
}
2018-06-05 18:59:04 +00:00
2018-11-05 16:32:09 +00:00
// GetType returns the ActivityVocabulary type of the current Activity
2018-07-20 16:07:36 +00:00
func ( a Activity ) GetType ( ) ActivityVocabularyType {
2018-06-09 12:05:46 +00:00
return a . Type
2018-06-09 11:06:55 +00:00
}
2018-07-20 16:07:36 +00:00
// IsLink returns false for Activity objects
func ( a Activity ) IsLink ( ) bool {
2018-06-09 11:06:55 +00:00
return false
}
2018-07-20 16:07:36 +00:00
// GetID returns the ObjectID corresponding to the Activity object
2018-07-25 09:47:03 +00:00
func ( a Activity ) GetID ( ) * ObjectID {
return & a . ID
2018-06-09 11:06:55 +00:00
}
2018-07-20 16:07:36 +00:00
2018-10-11 18:48:38 +00:00
// GetLink returns the IRI corresponding to the Activity object
func ( a Activity ) GetLink ( ) IRI {
return IRI ( a . ID )
}
2018-07-20 16:07:36 +00:00
// IsObject returns true for Activity objects
func ( a Activity ) IsObject ( ) bool {
2018-06-09 11:06:55 +00:00
return true
}
2019-12-01 18:27:45 +00:00
// IsCollection returns false for Activity objects
func ( a Activity ) IsCollection ( ) bool {
return false
}
2019-12-01 18:36:46 +00:00
// Recipients performs recipient de-duplication on the Activity's To, Bto, CC and BCC properties
func ( a * Activity ) Recipients ( ) ItemCollection {
actor := make ( ItemCollection , 0 )
actor . Append ( a . Actor )
rec , _ := ItemCollectionDeduplication ( & actor , & a . To , & a . Bto , & a . CC , & a . BCC , & a . Audience )
return rec
2018-08-05 11:52:40 +00:00
}
2019-12-01 18:36:46 +00:00
// Clean removes Bto and BCC properties
func ( a * Activity ) Clean ( ) {
a . BCC = nil
a . Bto = nil
2018-08-05 11:52:40 +00:00
}
2019-12-01 18:36:46 +00:00
// Recipients performs recipient de-duplication on the Activity's To, Bto, CC and BCC properties
func ( i * IntransitiveActivity ) Recipients ( ) ItemCollection {
actor := make ( ItemCollection , 0 )
actor . Append ( i . Actor )
rec , _ := ItemCollectionDeduplication ( & actor , & i . To , & i . Bto , & i . CC , & i . BCC , & i . Audience )
return rec
2018-08-05 11:52:40 +00:00
}
2019-12-01 18:36:46 +00:00
// Clean removes Bto and BCC properties
func ( i * IntransitiveActivity ) Clean ( ) {
i . BCC = nil
i . Bto = nil
2018-10-11 18:48:38 +00:00
}
2019-12-01 18:36:46 +00:00
// GetType returns the ActivityVocabulary type of the current Intransitive Activity
func ( i IntransitiveActivity ) GetType ( ) ActivityVocabularyType {
2018-08-05 11:52:40 +00:00
return i . Type
}
2019-12-01 18:36:46 +00:00
// IsLink returns false for Activity objects
func ( i IntransitiveActivity ) IsLink ( ) bool {
2018-08-05 11:52:40 +00:00
return false
}
2019-12-01 18:36:46 +00:00
// GetID returns the ObjectID corresponding to the IntransitiveActivity object
func ( i IntransitiveActivity ) GetID ( ) * ObjectID {
return & i . ID
2018-08-05 11:52:40 +00:00
}
2019-12-01 18:36:46 +00:00
// GetLink returns the IRI corresponding to the IntransitiveActivity object
func ( i IntransitiveActivity ) GetLink ( ) IRI {
2018-10-11 18:48:38 +00:00
return IRI ( i . ID )
}
2019-12-01 18:36:46 +00:00
// IsObject returns true for IntransitiveActivity objects
func ( i IntransitiveActivity ) IsObject ( ) bool {
2018-08-05 11:52:40 +00:00
return true
}
2019-12-01 18:36:46 +00:00
// IsCollection returns false for IntransitiveActivity objects
func ( i IntransitiveActivity ) IsCollection ( ) bool {
2018-08-05 11:52:40 +00:00
return false
}
// GetID returns the ObjectID corresponding to the Question object
func ( q Question ) GetID ( ) * ObjectID {
return & q . ID
}
2018-10-11 18:48:38 +00:00
// GetLink returns the IRI corresponding to the Question object
func ( q Question ) GetLink ( ) IRI {
return IRI ( q . ID )
}
2018-11-05 16:32:09 +00:00
// GetType returns the ActivityVocabulary type of the current Activity
2018-08-05 11:52:40 +00:00
func ( q Question ) GetType ( ) ActivityVocabularyType {
return q . Type
}
// IsObject returns true for Question objects
func ( q Question ) IsObject ( ) bool {
return true
}
// IsLink returns false for Question objects
func ( q Question ) IsLink ( ) bool {
return false
}
2019-12-01 18:36:46 +00:00
// IsCollection returns false for Question objects
func ( q Question ) IsCollection ( ) bool {
2018-08-05 11:52:40 +00:00
return false
}
2018-08-31 15:55:41 +00:00
// UnmarshalJSON
func ( a * Activity ) UnmarshalJSON ( data [ ] byte ) error {
2018-12-02 15:50:40 +00:00
a . Parent . UnmarshalJSON ( data )
2019-01-30 15:19:29 +00:00
a . Actor = JSONGetItem ( data , "actor" )
a . Object = JSONGetItem ( data , "object" )
2019-05-04 22:15:23 +00:00
a . Target = JSONGetItem ( data , "target" )
a . Instrument = JSONGetItem ( data , "instrument" )
a . Origin = JSONGetItem ( data , "origin" )
a . Result = JSONGetItem ( data , "result" )
2018-08-31 15:55:41 +00:00
return nil
}
2018-10-11 09:26:00 +00:00
2019-05-04 22:52:14 +00:00
// ToActivity
2019-05-07 21:11:15 +00:00
func ToActivity ( it Item ) ( * Activity , error ) {
2019-05-04 22:52:14 +00:00
switch i := it . ( type ) {
case * Activity :
2019-05-07 21:11:15 +00:00
return i , nil
2019-05-04 22:52:14 +00:00
case Activity :
2019-05-07 21:11:15 +00:00
return & i , nil
2019-12-03 11:47:27 +00:00
case * IntransitiveActivity :
return ( * Activity ) ( unsafe . Pointer ( i ) ) , nil
case IntransitiveActivity :
return ( * Activity ) ( unsafe . Pointer ( & i ) ) , nil
case * Question :
return ( * Activity ) ( unsafe . Pointer ( i ) ) , nil
case Question :
return ( * Activity ) ( unsafe . Pointer ( & i ) ) , nil
2019-05-04 22:52:14 +00:00
}
2019-05-07 21:11:15 +00:00
return nil , errors . New ( "unable to convert activity" )
2019-05-04 22:52:14 +00:00
}
2019-05-11 08:31:19 +00:00
2019-08-20 19:54:21 +00:00
// ToQuestion
func ToQuestion ( it Item ) ( * Question , error ) {
switch i := it . ( type ) {
case * Question :
return i , nil
case Question :
return & i , nil
}
return nil , errors . New ( "unable to convert to question activity" )
}
2019-08-20 19:49:58 +00:00
2019-08-20 19:54:21 +00:00
// ToIntransitiveActivity
2019-08-20 19:49:58 +00:00
func ToIntransitiveActivity ( it Item ) ( * IntransitiveActivity , error ) {
switch i := it . ( type ) {
case * IntransitiveActivity :
return i , nil
case IntransitiveActivity :
return & i , nil
}
2019-08-20 19:54:21 +00:00
return nil , errors . New ( "unable to convert to intransitive activity" )
2019-08-20 19:49:58 +00:00
}
2019-05-11 09:53:32 +00:00
// FlattenIntransitiveActivityProperties flattens the IntransitiveActivity's properties from Object type to IRI
2019-06-11 16:08:39 +00:00
func FlattenIntransitiveActivityProperties ( act * IntransitiveActivity ) * IntransitiveActivity {
2019-12-01 18:47:31 +00:00
act . Actor = Flatten ( act . Actor )
act . Target = Flatten ( act . Target )
act . Result = Flatten ( act . Result )
act . Origin = Flatten ( act . Origin )
act . Result = Flatten ( act . Result )
act . Instrument = Flatten ( act . Instrument )
2019-05-11 08:31:19 +00:00
return act
}
2019-05-11 09:53:32 +00:00
// FlattenActivityProperties flattens the Activity's properties from Object type to IRI
2019-06-11 16:08:39 +00:00
func FlattenActivityProperties ( act * Activity ) * Activity {
2019-12-01 18:47:31 +00:00
act . Object = Flatten ( act . Object )
act . Actor = Flatten ( act . Actor )
act . Target = Flatten ( act . Target )
act . Result = Flatten ( act . Result )
act . Origin = Flatten ( act . Origin )
act . Result = Flatten ( act . Result )
act . Instrument = Flatten ( act . Instrument )
2019-05-11 08:31:19 +00:00
return act
}