Added http.Handler interface

This commit is contained in:
Bruce Marriner 2016-06-01 16:49:10 -05:00
parent 97d16a5921
commit bdcd2f75e6
2 changed files with 42 additions and 25 deletions

View File

@ -7,6 +7,7 @@ snowflake is a [Go](https://golang.org/) package that provides
* Methods to parse existing snowflake IDs.
* Methods to convert a snowflake ID into several other data types.
* JSON Marshal/Unmarshal functions to easily use snowflake IDs within a JSON API.
* http.Handler interface to easily serve snowflake IDs over HTTP.
**For help with this package or general Go discussion, please join the [Discord
Gophers](https://discord.gg/0f1SbxBZjYq9jLBk) chat server.**
@ -39,40 +40,46 @@ cannot guarantee unique IDs across all nodes.
package main
import (
"fmt"
"github.com/bwmarrin/snowflake"
"fmt"
"net/http"
"github.com/bwmarrin/snowflake"
)
func main() {
// Create a new Node with a Node number of 1
node, err := snowflake.NewNode(1)
if err != nil {
fmt.Println(err)
return
}
// Create a new Node with a Node number of 1
node, err := snowflake.NewNode(1)
if err != nil {
fmt.Println(err)
return
}
// Generate a snowflake ID.
id, err := node.Generate()
if err != nil {
fmt.Println(err)
return
}
// Generate a snowflake ID.
id, err := node.Generate()
if err != nil {
fmt.Println(err)
return
}
// Print out the ID in a few different ways.
fmt.Printf("Int64 ID: %d\n", id)
fmt.Printf("String ID: %s\n", id)
fmt.Printf("Base2 ID: %s\n", id.Base2())
fmt.Printf("Base64 ID: %s\n", id.Base64())
// Print out the ID in a few different ways.
fmt.Printf("Int64 ID: %d\n", id)
fmt.Printf("String ID: %s\n", id)
fmt.Printf("Base2 ID: %s\n", id.Base2())
fmt.Printf("Base64 ID: %s\n", id.Base64())
// Print out the ID's timestamp
fmt.Printf("ID Time : %d\n", id.Time())
// Print out the ID's timestamp
fmt.Printf("ID Time : %d\n", id.Time())
// Print out the ID's node number
fmt.Printf("ID Node : %d\n", id.Node())
// Print out the ID's node number
fmt.Printf("ID Node : %d\n", id.Node())
// Print out the ID's sequence number
fmt.Printf("ID Step : %d\n", id.Step())
// Start HTTP Server for this Node on port 8080
http.ListenAndServe(":8080", node)
// Print out the ID's sequence number
fmt.Printf("ID Step : %d\n", id.Step())
}
```

View File

@ -4,6 +4,7 @@ package snowflake
import (
"encoding/base64"
"fmt"
"net/http"
"strconv"
"strings"
"sync"
@ -85,6 +86,15 @@ func (n *Node) Generate() (ID, error) {
), nil
}
func (n *Node) ServeHTTP(w http.ResponseWriter, r *http.Request) {
id, err := n.Generate()
if err != nil {
http.Error(w, "Internal Error", 500)
}
fmt.Fprint(w, id)
}
// Int64 returns an int64 of the snowflake ID
func (f ID) Int64() int64 {
return int64(f)