263 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			263 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package events
 | 
						|
 | 
						|
import (
 | 
						|
	"strings"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
// An EventName is a struct with the event name.
 | 
						|
type EventName struct {
 | 
						|
	Name string `json:"event"`
 | 
						|
}
 | 
						|
 | 
						|
// GetName returns the name of the event.
 | 
						|
func (e *EventName) GetName() string {
 | 
						|
	return strings.ToLower(e.Name)
 | 
						|
}
 | 
						|
 | 
						|
func (e *EventName) SetName(name string) {
 | 
						|
	e.Name = strings.ToLower(name)
 | 
						|
}
 | 
						|
 | 
						|
type Generic struct {
 | 
						|
	EventName
 | 
						|
	Timestamp float64 `json:"timestamp"`
 | 
						|
	ID        string  `json:"id"`
 | 
						|
}
 | 
						|
 | 
						|
func (g *Generic) GetTimestamp() time.Time {
 | 
						|
	return time.Unix(0, int64(g.Timestamp*float64(time.Second))).UTC()
 | 
						|
}
 | 
						|
 | 
						|
func (g *Generic) SetTimestamp(t time.Time) {
 | 
						|
	// convert := fmt.Sprintf("%d.%06d", t.Unix(), t.Nanosecond()/int(time.Microsecond))
 | 
						|
	// ts, err := strconv.ParseFloat(convert, 64)
 | 
						|
	g.Timestamp = float64(t.Unix()) + (float64(t.Nanosecond()/int(time.Microsecond)) / float64(1000000))
 | 
						|
}
 | 
						|
 | 
						|
func (g *Generic) GetID() string {
 | 
						|
	return g.ID
 | 
						|
}
 | 
						|
 | 
						|
func (g *Generic) SetID(id string) {
 | 
						|
	g.ID = id
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// Message Events
 | 
						|
//
 | 
						|
 | 
						|
type Accepted struct {
 | 
						|
	Generic
 | 
						|
 | 
						|
	Envelope Envelope `json:"envelope"`
 | 
						|
	Message  Message  `json:"message"`
 | 
						|
	Flags    Flags    `json:"flags"`
 | 
						|
 | 
						|
	Recipient       string                 `json:"recipient"`
 | 
						|
	RecipientDomain string                 `json:"recipient-domain"`
 | 
						|
	Method          string                 `json:"method"`
 | 
						|
	OriginatingIP   string                 `json:"originating-ip"`
 | 
						|
	Tags            []string               `json:"tags"`
 | 
						|
	Campaigns       []Campaign             `json:"campaigns"`
 | 
						|
	UserVariables   map[string]interface{} `json:"user-variables"`
 | 
						|
}
 | 
						|
 | 
						|
type Rejected struct {
 | 
						|
	Generic
 | 
						|
 | 
						|
	Reject struct {
 | 
						|
		Reason      string `json:"reason"`
 | 
						|
		Description string `json:"description"`
 | 
						|
	} `json:"reject"`
 | 
						|
 | 
						|
	Message Message `json:"message"`
 | 
						|
	Storage Storage `json:"storage"`
 | 
						|
	Flags   Flags   `json:"flags"`
 | 
						|
 | 
						|
	Tags          []string               `json:"tags"`
 | 
						|
	Campaigns     []Campaign             `json:"campaigns"`
 | 
						|
	UserVariables map[string]interface{} `json:"user-variables"`
 | 
						|
}
 | 
						|
 | 
						|
type Delivered struct {
 | 
						|
	Generic
 | 
						|
 | 
						|
	Envelope Envelope `json:"envelope"`
 | 
						|
	Message  Message  `json:"message"`
 | 
						|
	Flags    Flags    `json:"flags"`
 | 
						|
 | 
						|
	Recipient       string     `json:"recipient"`
 | 
						|
	RecipientDomain string     `json:"recipient-domain"`
 | 
						|
	Method          string     `json:"method"`
 | 
						|
	Tags            []string   `json:"tags"`
 | 
						|
	Campaigns       []Campaign `json:"campaigns"`
 | 
						|
 | 
						|
	DeliveryStatus DeliveryStatus         `json:"delivery-status"`
 | 
						|
	UserVariables  map[string]interface{} `json:"user-variables"`
 | 
						|
}
 | 
						|
 | 
						|
type Failed struct {
 | 
						|
	Generic
 | 
						|
 | 
						|
	Envelope Envelope `json:"envelope"`
 | 
						|
	Message  Message  `json:"message"`
 | 
						|
	Flags    Flags    `json:"flags"`
 | 
						|
 | 
						|
	Recipient       string     `json:"recipient"`
 | 
						|
	RecipientDomain string     `json:"recipient-domain"`
 | 
						|
	Method          string     `json:"method"`
 | 
						|
	Tags            []string   `json:"tags"`
 | 
						|
	Campaigns       []Campaign `json:"campaigns"`
 | 
						|
 | 
						|
	DeliveryStatus DeliveryStatus         `json:"delivery-status"`
 | 
						|
	Severity       string                 `json:"severity"`
 | 
						|
	Reason         string                 `json:"reason"`
 | 
						|
	UserVariables  map[string]interface{} `json:"user-variables"`
 | 
						|
}
 | 
						|
 | 
						|
type Stored struct {
 | 
						|
	Generic
 | 
						|
 | 
						|
	Message Message `json:"message"`
 | 
						|
	Storage Storage `json:"storage"`
 | 
						|
	Flags   Flags   `json:"flags"`
 | 
						|
 | 
						|
	Tags          []string               `json:"tags"`
 | 
						|
	Campaigns     []Campaign             `json:"campaigns"`
 | 
						|
	UserVariables map[string]interface{} `json:"user-variables"`
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// Message Events (User)
 | 
						|
//
 | 
						|
 | 
						|
type Opened struct {
 | 
						|
	Generic
 | 
						|
 | 
						|
	Message     Message     `json:"message"`
 | 
						|
	Campaigns   []Campaign  `json:"campaigns"`
 | 
						|
	MailingList MailingList `json:"mailing-list"`
 | 
						|
 | 
						|
	Recipient       string   `json:"recipient"`
 | 
						|
	RecipientDomain string   `json:"recipient-domain"`
 | 
						|
	Tags            []string `json:"tags"`
 | 
						|
 | 
						|
	IP          string      `json:"ip"`
 | 
						|
	ClientInfo  ClientInfo  `json:"client-info"`
 | 
						|
	GeoLocation GeoLocation `json:"geolocation"`
 | 
						|
 | 
						|
	UserVariables map[string]interface{} `json:"user-variables"`
 | 
						|
}
 | 
						|
 | 
						|
type Clicked struct {
 | 
						|
	Generic
 | 
						|
 | 
						|
	Url string `json:"url"`
 | 
						|
 | 
						|
	Message     Message     `json:"message"`
 | 
						|
	Campaigns   []Campaign  `json:"campaigns"`
 | 
						|
	MailingList MailingList `json:"mailing-list"`
 | 
						|
 | 
						|
	Recipient       string   `json:"recipient"`
 | 
						|
	RecipientDomain string   `json:"recipient-domain"`
 | 
						|
	Tags            []string `json:"tags"`
 | 
						|
 | 
						|
	IP          string      `json:"ip"`
 | 
						|
	ClientInfo  ClientInfo  `json:"client-info"`
 | 
						|
	GeoLocation GeoLocation `json:"geolocation"`
 | 
						|
 | 
						|
	UserVariables map[string]interface{} `json:"user-variables"`
 | 
						|
}
 | 
						|
 | 
						|
type Unsubscribed struct {
 | 
						|
	Generic
 | 
						|
 | 
						|
	Message     Message     `json:"message"`
 | 
						|
	Campaigns   []Campaign  `json:"campaigns"`
 | 
						|
	MailingList MailingList `json:"mailing-list"`
 | 
						|
 | 
						|
	Recipient       string   `json:"recipient"`
 | 
						|
	RecipientDomain string   `json:"recipient-domain"`
 | 
						|
	Tags            []string `json:"tags"`
 | 
						|
 | 
						|
	IP          string      `json:"ip"`
 | 
						|
	ClientInfo  ClientInfo  `json:"client-info"`
 | 
						|
	GeoLocation GeoLocation `json:"geolocation"`
 | 
						|
 | 
						|
	UserVariables map[string]interface{} `json:"user-variables"`
 | 
						|
}
 | 
						|
 | 
						|
type Complained struct {
 | 
						|
	Generic
 | 
						|
 | 
						|
	Message   Message    `json:"message"`
 | 
						|
	Campaigns []Campaign `json:"campaigns"`
 | 
						|
 | 
						|
	Recipient     string                 `json:"recipient"`
 | 
						|
	Tags          []string               `json:"tags"`
 | 
						|
	UserVariables map[string]interface{} `json:"user-variables"`
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// Mailing List Events
 | 
						|
//
 | 
						|
 | 
						|
type MailingListMember struct {
 | 
						|
	Subscribed bool
 | 
						|
	Address    string
 | 
						|
	Name       string
 | 
						|
	Vars       []string
 | 
						|
}
 | 
						|
 | 
						|
type MailingListError struct {
 | 
						|
	Message string
 | 
						|
}
 | 
						|
 | 
						|
type ListMemberUploaded struct {
 | 
						|
	Generic
 | 
						|
	MailingList MailingList       `json:"mailing-list"`
 | 
						|
	Member      MailingListMember `json:"member"`
 | 
						|
	TaskID      string            `json:"task-id"`
 | 
						|
}
 | 
						|
 | 
						|
type ListMemberUploadError struct {
 | 
						|
	Generic
 | 
						|
	MailingList       MailingList      `json:"mailing-list"`
 | 
						|
	TaskID            string           `json:"task-id"`
 | 
						|
	Format            string           `json:"format"`
 | 
						|
	MemberDescription string           `json:"member-description"`
 | 
						|
	Error             MailingListError `json:"error"`
 | 
						|
}
 | 
						|
 | 
						|
type ListUploaded struct {
 | 
						|
	Generic
 | 
						|
	MailingList   MailingList       `json:"mailing-list"`
 | 
						|
	IsUpsert      bool              `json:"is-upsert"`
 | 
						|
	Format        string            `json:"format"`
 | 
						|
	UpsertedCount int               `json:"upserted-count"`
 | 
						|
	FailedCount   int               `json:"failed-count"`
 | 
						|
	Member        MailingListMember `json:"member"`
 | 
						|
	Subscribed    bool              `json:"subscribed"`
 | 
						|
	TaskID        string            `json:"task-id"`
 | 
						|
}
 | 
						|
 | 
						|
type Paging struct {
 | 
						|
	First    string `json:"first,omitempty"`
 | 
						|
	Next     string `json:"next,omitempty"`
 | 
						|
	Previous string `json:"previous,omitempty"`
 | 
						|
	Last     string `json:"last,omitempty"`
 | 
						|
}
 | 
						|
 | 
						|
type RawJSON []byte
 | 
						|
 | 
						|
func (v *RawJSON) UnmarshalJSON(data []byte) error {
 | 
						|
	*v = data
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
type Response struct {
 | 
						|
	Items  []RawJSON `json:"items"`
 | 
						|
	Paging Paging    `json:"paging"`
 | 
						|
}
 |