Miki Tebeka avatar Miki Tebeka committed 2f349ab

nrsc package

Comments (0)

Files changed (5)

 
     nrsc path_to_resource_dir
 
-This will emit to standard output a Go source file code (in package `main`)
+This will create a local directory called `nrsc` which you can import in your
+code.
 
 API
 ===
-The main object is `nrsc`, it has the following interface
+The `nrsc` package has the following interface
 
 `nrsc.Handle(prefix string)`
     This will register with the `net/http` module to handle all paths starting with prefix. 
 Status
 ======
 Current status of the code is "playing". Nothing really written. There's an
-example implementation in the `resources` directory and a web server in `hw.go`.
+example implementation in the `playground` directory and a web server in `hw.go`.

hw.go

-package main
-
-import (
-	"fmt"
-	"net/http"
-
-	"./resources"
-)
-
-func indexHandler(w http.ResponseWriter, req *http.Request) {
-	fmt.Fprintf(w, "Hello World\n")
-}
-
-func main() {
-	resources.Handle("/static/")
-	http.HandleFunc("/", indexHandler)
-	http.ListenAndServe(":8080", nil)
-}
+package main
+
+import (
+	"fmt"
+	"net/http"
+	"os"
+
+	"./nrsc"
+)
+
+func indexHandler(w http.ResponseWriter, req *http.Request) {
+	fmt.Fprintf(w, "Hello World\n")
+}
+
+func main() {
+	nrsc.Handle("/static/")
+	http.HandleFunc("/", indexHandler)
+	if err := http.ListenAndServe(":8080", nil); err != nil {
+		fmt.Fprintf(os.Stderr, "error: %s\n", err)
+		os.Exit(1)
+	}
+}

playground/nrsc/nrsc.go

+package nrsc
+
+import (
+	"bytes"
+	"fmt"
+	"io"
+	"net/http"
+	"time"
+)
+
+type Resource interface {
+	Open() io.Reader
+	Size() int
+	Type() string
+	Time() time.Time
+}
+
+var resources map[string]Resource
+
+type resource struct {
+	data  []byte
+	ctype string
+	time  time.Time
+}
+
+func (rsc *resource) Open() io.Reader {
+	return bytes.NewReader(rsc.data)
+}
+
+func (rsc *resource) Size() int {
+	return len(rsc.data)
+}
+
+func (rsc *resource) Type() string {
+	return rsc.ctype
+}
+
+func (rsc *resource) Time() time.Time {
+	return rsc.time
+}
+
+type handler int
+
+func (h handler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
+	rsc := resources[req.URL.Path]
+	if rsc == nil {
+		http.NotFound(w, req)
+		return
+	}
+
+	w.Header().Set("Content-Type", rsc.Type())
+	w.Header().Set("Content-Size", fmt.Sprintf("%d", rsc.Size()))
+	w.Header().Set("Last-Modified", rsc.Time().UTC().Format(http.TimeFormat))
+
+	io.Copy(w, rsc.Open())
+}
+
+func Get(path string) Resource {
+	return resources[path]
+}
+
+func Handle(prefix string) {
+	var h handler
+	http.Handle(prefix, http.StripPrefix(prefix, h))
+}
+
+func init() {
+	resources = make(map[string]Resource)
+	resources["hello"] = &resource{
+		[]byte{
+			0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x74,
+			0x68, 0x65, 0x72, 0x65, 0xa,
+		},
+		"text/plain",
+		time.Unix(0, 0),
+	}
+}

resources/resources.go

-package resources
-
-import (
-	"bytes"
-	"fmt"
-	"io"
-	"net/http"
-	"time"
-)
-
-type Resource interface {
-	Open() io.Reader
-	Size() int
-	Type() string
-	Time() time.Time
-}
-
-var resources map[string]Resource
-
-type resource struct {
-	data  []byte
-	ctype string
-	time  time.Time
-}
-
-func (rsc *resource) Open() io.Reader {
-	return bytes.NewReader(rsc.data)
-}
-
-func (rsc *resource) Size() int {
-	return len(rsc.data)
-}
-
-func (rsc *resource) Type() string {
-	return rsc.ctype
-}
-
-func (rsc *resource) Time() time.Time {
-	return rsc.time
-}
-
-type handler int
-
-func (h handler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
-	rsc := resources[req.URL.Path]
-	if rsc == nil {
-		http.NotFound(w, req)
-		return
-	}
-
-	w.Header().Set("Content-Type", rsc.Type())
-	w.Header().Set("Content-Size", fmt.Sprintf("%d", rsc.Size()))
-	w.Header().Set("Last-Modified", rsc.Time().UTC().Format(http.TimeFormat))
-
-	io.Copy(w, rsc.Open())
-}
-
-func Get(path string) Resource {
-	return resources[path]
-}
-
-func Handle(prefix string) {
-	var h handler
-	http.Handle(prefix, http.StripPrefix(prefix, h))
-}
-
-func init() {
-	resources = make(map[string]Resource)
-	resources["hello"] = &resource{
-		[]byte{
-			0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x74,
-			0x68, 0x65, 0x72, 0x65, 0xa,
-		},
-		"text/plain",
-		time.Unix(0, 0),
-	}
-}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.