Added arn to the main repository
This commit is contained in:
47
arn/Postable.go
Normal file
47
arn/Postable.go
Normal file
@ -0,0 +1,47 @@
|
||||
package arn
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"sort"
|
||||
)
|
||||
|
||||
// Postable is a generic interface for Threads, Posts and Messages.
|
||||
type Postable interface {
|
||||
Likeable
|
||||
|
||||
TitleByUser(*User) string
|
||||
HTML() string
|
||||
Parent() PostParent
|
||||
Posts() []*Post
|
||||
CountPosts() int
|
||||
TypeName() string
|
||||
Creator() *User
|
||||
|
||||
// Use Get prefix for these to avoid a
|
||||
// name clash with the internal fields.
|
||||
GetID() string
|
||||
GetText() string
|
||||
GetCreated() string
|
||||
GetParentID() string
|
||||
}
|
||||
|
||||
// ToPostables converts a slice of specific types to a slice of generic postables.
|
||||
func ToPostables(sliceOfPosts interface{}) []Postable {
|
||||
var postables []Postable
|
||||
|
||||
v := reflect.ValueOf(sliceOfPosts)
|
||||
|
||||
for i := 0; i < v.Len(); i++ {
|
||||
postable := v.Index(i).Interface().(Postable)
|
||||
postables = append(postables, postable)
|
||||
}
|
||||
|
||||
return postables
|
||||
}
|
||||
|
||||
// SortPostablesLatestFirst ...
|
||||
func SortPostablesLatestFirst(posts []Postable) {
|
||||
sort.Slice(posts, func(i, j int) bool {
|
||||
return posts[i].GetCreated() > posts[j].GetCreated()
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user