aboutsummaryrefslogtreecommitdiff
path: root/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'server.go')
-rw-r--r--server.go81
1 files changed, 38 insertions, 43 deletions
diff --git a/server.go b/server.go
index 8ad76d1..3d10b5f 100644
--- a/server.go
+++ b/server.go
@@ -14,21 +14,19 @@ import (
"git.sr.ht/~shulhan/pakakeh.go/lib/memfs"
)
-// server contains the HTTP server that serve the generated HTML files.
-type server struct {
- http *libhttp.Server
- converter *Converter
- watcher *watcher
- opts ServeOptions
-}
-
-// newServer create an HTTP server to serve HTML files in directory "root".
+// InitHTTPServer create an HTTP server to serve HTML files in directory
+// defined in "[ConvertOptions].Root".
//
// The address parameter is optional, if not set its default to ":8080".
// The htmlTemplate parameter is optional, if not set its default to
// embedded HTML template.
-func newServer(opts *ServeOptions) (srv *server, err error) {
- var logp = `newServer`
+func (ciigo *Ciigo) InitHTTPServer(opts ServeOptions) (err error) {
+ var logp = `initServer`
+
+ err = opts.init()
+ if err != nil {
+ return fmt.Errorf(`%s: %w`, logp, err)
+ }
if opts.Mfs == nil {
opts.IsDevelopment = true
@@ -39,15 +37,13 @@ func newServer(opts *ServeOptions) (srv *server, err error) {
}
opts.Mfs, err = memfs.New(mfsopts)
if err != nil {
- return nil, fmt.Errorf(`%s: %w`, logp, err)
+ return fmt.Errorf(`%s: %w`, logp, err)
}
} else {
opts.Mfs.Opts.TryDirect = opts.IsDevelopment
}
- srv = &server{
- opts: *opts,
- }
+ ciigo.serveOpts = opts
var httpdOpts = libhttp.ServerOptions{
Memfs: opts.Mfs,
@@ -55,9 +51,9 @@ func newServer(opts *ServeOptions) (srv *server, err error) {
EnableIndexHTML: opts.EnableIndexHTML,
}
- srv.http, err = libhttp.NewServer(httpdOpts)
+ ciigo.HTTPServer, err = libhttp.NewServer(httpdOpts)
if err != nil {
- return nil, fmt.Errorf(`%s: %w`, logp, err)
+ return fmt.Errorf(`%s: %w`, logp, err)
}
var epInSearch = libhttp.Endpoint{
@@ -65,12 +61,12 @@ func newServer(opts *ServeOptions) (srv *server, err error) {
Path: `/_internal/search`,
RequestType: libhttp.RequestTypeQuery,
ResponseType: libhttp.ResponseTypeHTML,
- Call: srv.onSearch,
+ Call: ciigo.onSearch,
}
- err = srv.http.RegisterEndpoint(epInSearch)
+ err = ciigo.HTTPServer.RegisterEndpoint(epInSearch)
if err != nil {
- return nil, fmt.Errorf(`%s: %w`, logp, err)
+ return fmt.Errorf(`%s: %w`, logp, err)
}
var pathHTMLTemplate string
@@ -79,9 +75,9 @@ func newServer(opts *ServeOptions) (srv *server, err error) {
pathHTMLTemplate = opts.HTMLTemplate
}
- srv.converter, err = NewConverter(pathHTMLTemplate)
+ ciigo.converter, err = NewConverter(pathHTMLTemplate)
if err != nil {
- return nil, fmt.Errorf(`%s: %w`, logp, err)
+ return fmt.Errorf(`%s: %w`, logp, err)
}
if !opts.IsDevelopment {
@@ -89,54 +85,53 @@ func newServer(opts *ServeOptions) (srv *server, err error) {
tmplNode, _ = opts.Mfs.Get(internalTemplatePath)
if tmplNode != nil {
- srv.converter.tmpl, err = srv.converter.tmpl.Parse(string(tmplNode.Content))
+ ciigo.converter.tmpl, err = ciigo.converter.tmpl.Parse(string(tmplNode.Content))
if err != nil {
- return nil, fmt.Errorf(`%s: %s`, logp, err)
+ return fmt.Errorf(`%s: %s`, logp, err)
}
}
}
if opts.IsDevelopment {
- srv.watcher, err = newWatcher(srv.converter, &opts.ConvertOptions)
+ ciigo.watcher, err = newWatcher(ciigo.converter, opts.ConvertOptions)
if err != nil {
- return nil, fmt.Errorf(`%s: %w`, logp, err)
+ return fmt.Errorf(`%s: %w`, logp, err)
}
- srv.converter.convertFileMarkups(srv.watcher.fileMarkups, false)
+ ciigo.converter.convertFileMarkups(ciigo.watcher.fileMarkups, false)
}
- return srv, nil
+ return nil
}
-// start the web server.
-func (srv *server) start() (err error) {
- var (
- logp = `start`
- )
+// Serve start the HTTP web server.
+func (ciigo *Ciigo) Serve() (err error) {
+ var logp = `Serve`
- if srv.opts.IsDevelopment {
- err = srv.watcher.start()
+ if ciigo.serveOpts.IsDevelopment {
+ err = ciigo.watcher.start()
if err != nil {
return fmt.Errorf(`%s: %w`, logp, err)
}
}
log.Printf(`ciigo: starting HTTP server at http://%s for %q`,
- srv.http.Options.Address, srv.http.Options.Memfs.Opts.Root)
+ ciigo.HTTPServer.Options.Address,
+ ciigo.HTTPServer.Options.Memfs.Opts.Root)
- err = srv.http.Start()
+ err = ciigo.HTTPServer.Start()
if err != nil {
return fmt.Errorf(`%s: %w`, logp, err)
}
- if srv.opts.IsDevelopment {
- srv.watcher.stop()
+ if ciigo.serveOpts.IsDevelopment {
+ ciigo.watcher.stop()
}
return nil
}
-func (srv *server) onSearch(epr *libhttp.EndpointRequest) (resBody []byte, err error) {
+func (ciigo *Ciigo) onSearch(epr *libhttp.EndpointRequest) (resBody []byte, err error) {
var (
logp = `onSearch`
@@ -147,9 +142,9 @@ func (srv *server) onSearch(epr *libhttp.EndpointRequest) (resBody []byte, err e
)
q = epr.HTTPRequest.Form.Get(`q`)
- results = srv.http.Options.Memfs.Search(strings.Fields(q), 0)
+ results = ciigo.HTTPServer.Options.Memfs.Search(strings.Fields(q), 0)
- err = srv.converter.tmplSearch.Execute(&buf, results)
+ err = ciigo.converter.tmplSearch.Execute(&buf, results)
if err != nil {
return nil, fmt.Errorf(`%s: %w`, logp, err)
}
@@ -160,7 +155,7 @@ func (srv *server) onSearch(epr *libhttp.EndpointRequest) (resBody []byte, err e
buf.Reset()
- err = srv.converter.tmpl.Execute(&buf, fhtml)
+ err = ciigo.converter.tmpl.Execute(&buf, fhtml)
if err != nil {
return nil, fmt.Errorf(`%s: %w`, logp, err)
}