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"`
 | |
| }
 |