package main import ( "surdeus.su/core/ss" ) import "surdeus.su/core/ss/methods" import "surdeus.su/core/ss/contents" import "surdeus.su/core/ss/statuses" var testHandler = ss.Func(func(c *ss.Context){ c.SetContentType(contents.Plain, contents.Utf8) c.Printf( "AbsPath: %q\n" + "Prefix: %q\n" + "Path: %q\n"+ "Content-Type: %q\n", c.AbsPath(), c.PathPrefix(), c.Path(), c.ContentType(), ) c.Printf("Query:\n") for k, vs := range c.Query() { c.Printf("\t%q:\n", k) for _, v := range vs { c.Printf("\t\t%q\n", v) } } }) var helloHandler = ss.Path( // Default fallback handler. testHandler, ).Case( // Using the relative redirect to force us to the en. "", ss.Redirect("en", statuses.Found), ).Case( "en", ss.Func(func(c *ss.Context) { c.Printf("Hello, World!") }), ).Case( "ru", ss.Func(func(c *ss.Context) { c.Printf("Привет, Мир!") }), ) type GetNotesOptions struct { Id int `json:"id"` Author string `json:"author"` Title string `json:"title"` Text string `json:"text"` } var apiHandler = ss.Path( nil, ).Case( "note", ss.Method( // The default handler. nil, ).Case( methods.Get, nil, ).Case( methods.Post, ss.Func(func(c *ss.Context) { opts := GetNotesOptions{} c.Scan(&opts) c.Printf("%v", opts) }), ), ) var root = ss.Root(ss.Path( testHandler, ).Case( // Static file serving example. "", ss.StaticFile("index.html"), ).Case( "hello", helloHandler, ).Case( "google", ss.Redirect("https://google.com", statuses.Found), ).Case( "web", ss.StaticDir("./static"), ).Case( "api", apiHandler, )) func main() { srv := ss.Server{ Addr: ":10800", Handler: root, } err := srv.ListenAndServe() if err != nil { panic(err) } }