You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
2.0 KiB
Go

//////////////////////////////////////////////////////////////////////
//
// DO NOT EDIT THIS PART
// Your task is to edit `main.go`
//
package main
import (
"errors"
"strings"
"time"
)
// GetMockStream is a blackbox function which returns a mock stream for
// demonstration purposes
func GetMockStream() Stream {
return Stream{0, mockdata}
}
// Stream is a mock stream for demonstration purposes, not threadsafe
type Stream struct {
pos int
tweets []Tweet
}
// ErrEOF returns on End of File error
var ErrEOF = errors.New("End of File")
// Next returns the next Tweet in the stream, returns EOF error if
// there are no more tweets
func (s *Stream) Next() (*Tweet, error) {
// simulate delay
time.Sleep(320 * time.Millisecond)
if s.pos >= len(s.tweets) {
return &Tweet{}, ErrEOF
}
tweet := s.tweets[s.pos]
s.pos++
return &tweet, nil
}
// Tweet defines the simlified representation of a tweet
type Tweet struct {
Username string
Text string
}
// IsTalkingAboutGo is a mock process which pretend to be a sophisticated procedure to analyse whether tweet is talking about go or not
func (t *Tweet) IsTalkingAboutGo() bool {
// simulate delay
time.Sleep(330 * time.Millisecond)
hasGolang := strings.Contains(strings.ToLower(t.Text), "golang")
hasGopher := strings.Contains(strings.ToLower(t.Text), "gopher")
return hasGolang || hasGopher
}
var mockdata = []Tweet{
{
"davecheney",
"#golang top tip: if your unit tests import any other package you wrote, including themselves, they're not unit tests.",
}, {
"beertocode",
"Backend developer, doing frontend featuring the eternal struggle of centering something. #coding",
}, {
"ironzeb",
"Re: Popularity of Golang in China: My thinking nowadays is that it had a lot to do with this book and author https://github.com/astaxie/build-web-application-with-golang",
}, {
"beertocode",
"Looking forward to the #gopher meetup in Hsinchu tonight with @ironzeb!",
}, {
"vampirewalk666",
"I just wrote a golang slack bot! It reports the state of github repository. #Slack #golang",
},
}