mirror of
https://github.com/caddyserver/caddy.git
synced 2025-07-09 03:04:57 -04:00
Update for LoadModule refactoring that uses struct tags
parent
e272ea0baa
commit
54ccf2f30c
@ -46,7 +46,7 @@ type Gizmo struct {
|
||||
// CaddyModule returns the Caddy module information.
|
||||
func (Gizmo) CaddyModule() caddy.ModuleInfo {
|
||||
return caddy.ModuleInfo{
|
||||
Name: "foo.gizmo",
|
||||
ID: "foo.gizmo",
|
||||
New: func() caddy.Module { return new(Gizmo) },
|
||||
}
|
||||
}
|
||||
@ -72,11 +72,11 @@ We will show you how to satisfy these requirements in the next sections. It's re
|
||||
|
||||
# Module Names
|
||||
|
||||
Each Caddy module has a unique name, consisting of a namespace and ID:
|
||||
Each Caddy module has a unique ID, consisting of a namespace and name:
|
||||
|
||||
- A name looks like `a.b.c.module_id`
|
||||
- A complete ID looks like `a.b.c.module_name`
|
||||
- The namespace would be `a.b.c`
|
||||
- The module ID would be `module_id` which must be unique in its namespace
|
||||
- The name would be `module_name` which must be unique in its namespace
|
||||
|
||||
_Host modules_ (or _parent modules_) are modules which load/initialize other modules. They typically define namespaces for guest modules.
|
||||
|
||||
@ -241,11 +241,12 @@ A host module will need to load and use its guest modules. Caddy provides facili
|
||||
First, host modules need a way to receive the guest modules' configuration. This is typically done by adding `json.RawMessage` fields to the struct, and then using the Provision method to load them into a non-JSON type. For example, if your module `Gizmo` has a `Gadget` guest module that implements a `Gadgeter` interface, you would add two fields, `GadgetRaw` and `Gadget`:
|
||||
|
||||
```go
|
||||
GadgetRaw json.RawMessage `json:"gadget,omitempty"`
|
||||
GadgetRaw json.RawMessage `json:"gadget,omitempty" caddy:"namespace=foo.gizmo.gadgets inline_key=gadgeter"`
|
||||
|
||||
// the decoded value of the guest module will be
|
||||
// stored here, but it doesn't get used for JSON
|
||||
// so make sure to exclude it with "-"
|
||||
// so make sure to either exclude it with "-" or
|
||||
// unexport it
|
||||
Gadget Gadgeter `json:"-"`
|
||||
```
|
||||
|
||||
@ -262,12 +263,11 @@ Here's an example of using `LoadModuleInline()` to get a Gadgeter for our Gizmo
|
||||
// Provision sets up g and loads its gadget.
|
||||
func (g *Gizmo) Provision(ctx caddy.Context) error {
|
||||
if g.GadgetRaw != nil {
|
||||
val, err := ctx.LoadModuleInline("gadgeter", "foo.gizmo.gadgets", g.GadgetRaw)
|
||||
val, err := ctx.LoadModule(g, "GadgetRaw")
|
||||
if err != nil {
|
||||
return fmt.Errorf("loading gadget module: %v", err)
|
||||
}
|
||||
g.Gadget = val.(Gadgeter)
|
||||
g.GadgetRaw = nil // allow GC to deallocate
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -316,8 +316,8 @@ type Middleware struct {
|
||||
// CaddyModule returns the Caddy module information.
|
||||
func (Middleware) CaddyModule() caddy.ModuleInfo {
|
||||
return caddy.ModuleInfo{
|
||||
Name: "http.handlers.visitor_ip",
|
||||
New: func() caddy.Module { return new(Middleware) },
|
||||
ID: "http.handlers.visitor_ip",
|
||||
New: func() caddy.Module { return new(Middleware) },
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user