95 lines
2.9 KiB
Go
95 lines
2.9 KiB
Go
|
package groupme
|
||
|
|
||
|
import (
|
||
|
"regexp"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
// GroupMe documentation: https://dev.groupme.com/docs/responses
|
||
|
|
||
|
// ID is an unordered alphanumeric string
|
||
|
type ID string
|
||
|
|
||
|
// Treated as a constant
|
||
|
var alphaNumericRegex = regexp.MustCompile(`^[a-zA-Z0-9]+$`)
|
||
|
|
||
|
// Valid checks if the ID string is alpha numeric
|
||
|
func (id ID) Valid() bool {
|
||
|
return alphaNumericRegex.MatchString(string(id))
|
||
|
}
|
||
|
|
||
|
func (id ID) String() string {
|
||
|
return string(id)
|
||
|
}
|
||
|
|
||
|
// Timestamp is the number of seconds since the UNIX epoch
|
||
|
type Timestamp uint64
|
||
|
|
||
|
// FromTime returns the time.Time as a Timestamp
|
||
|
func FromTime(t time.Time) Timestamp {
|
||
|
return Timestamp(t.Unix())
|
||
|
}
|
||
|
|
||
|
// ToTime returns the Timestamp as a UTC Time
|
||
|
func (t Timestamp) ToTime() time.Time {
|
||
|
return time.Unix(int64(t), 0).UTC()
|
||
|
}
|
||
|
|
||
|
// String returns the Timestamp in the default time.Time string format
|
||
|
func (t Timestamp) String() string {
|
||
|
return t.ToTime().String()
|
||
|
}
|
||
|
|
||
|
// PhoneNumber is the country code plus the number of the user
|
||
|
type PhoneNumber string
|
||
|
|
||
|
// Treated as a constant
|
||
|
var phoneNumberRegex = regexp.MustCompile(`^\+[0-9]+ [0-9]{10}$`)
|
||
|
|
||
|
// Valid checks if the ID string is alpha numeric
|
||
|
func (pn PhoneNumber) Valid() bool {
|
||
|
return phoneNumberRegex.MatchString(string(pn))
|
||
|
}
|
||
|
|
||
|
func (pn PhoneNumber) String() string {
|
||
|
return string(pn)
|
||
|
}
|
||
|
|
||
|
// StatusCodes are returned by HTTP requests in
|
||
|
// the header and the json "meta" field
|
||
|
type HTTPStatusCode int
|
||
|
|
||
|
// Text used as constant name
|
||
|
const (
|
||
|
HTTP_Ok HTTPStatusCode = 200
|
||
|
HTTP_Created HTTPStatusCode = 201
|
||
|
HTTP_NoContent HTTPStatusCode = 204
|
||
|
HTTP_NotModified HTTPStatusCode = 304
|
||
|
HTTP_BadRequest HTTPStatusCode = 400
|
||
|
HTTP_Unauthorized HTTPStatusCode = 401
|
||
|
HTTP_Forbidden HTTPStatusCode = 403
|
||
|
HTTP_NotFound HTTPStatusCode = 404
|
||
|
HTTP_EnhanceYourCalm HTTPStatusCode = 420
|
||
|
HTTP_InternalServerError HTTPStatusCode = 500
|
||
|
HTTP_BadGateway HTTPStatusCode = 502
|
||
|
HTTP_ServiceUnavailable HTTPStatusCode = 503
|
||
|
)
|
||
|
|
||
|
// String returns the description of the status code according to GroupMe
|
||
|
func (c HTTPStatusCode) String() string {
|
||
|
return map[HTTPStatusCode]string{
|
||
|
HTTP_Ok: "success",
|
||
|
HTTP_Created: "resource was created successfully",
|
||
|
HTTP_NoContent: "resource was deleted successfully",
|
||
|
HTTP_NotModified: "no new data to return",
|
||
|
HTTP_BadRequest: "invalid format or data specified in the request",
|
||
|
HTTP_Unauthorized: "authentication credentials missing or incorrect",
|
||
|
HTTP_Forbidden: "request refused due to update limits",
|
||
|
HTTP_NotFound: "URI is invalid or resource does not exist",
|
||
|
HTTP_EnhanceYourCalm: "application is being rate limited",
|
||
|
HTTP_InternalServerError: "something unexpected occurred",
|
||
|
HTTP_BadGateway: "GroupMe is down or being upgraded",
|
||
|
HTTP_ServiceUnavailable: "servers are overloaded, try again later",
|
||
|
}[c]
|
||
|
}
|