good morning!!!!

Skip to content
Snippets Groups Projects
unmarshaller.go 1.24 KiB
Newer Older
Garet Halliday's avatar
Garet Halliday committed
package gatcaddyfile

import (
	"encoding/json"
	"fmt"
	"strings"

	"github.com/caddyserver/caddy/v2"
	"github.com/caddyserver/caddy/v2/caddyconfig"
	"github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
)

Garet Halliday's avatar
Garet Halliday committed
type Unmarshaller func(*caddyfile.Dispenser, *[]caddyconfig.Warning) (caddy.Module, error)
Garet Halliday's avatar
Garet Halliday committed

func (T Unmarshaller) JSONModuleObject(
	d *caddyfile.Dispenser,
	namespace string,
	inlineKey string,
	warnings *[]caddyconfig.Warning,
) (json.RawMessage, error) {
Garet Halliday's avatar
Garet Halliday committed
	module, err := T(d, warnings)
Garet Halliday's avatar
Garet Halliday committed
	if err != nil {
		return nil, err
	}

Garet Halliday's avatar
Garet Halliday committed
	return JSONModuleObject(
		module,
		namespace,
		inlineKey,
		warnings,
	), nil
}

func JSONModuleObject(
	module caddy.Module,
	namespace string,
	inlineKey string,
	warnings *[]caddyconfig.Warning,
) json.RawMessage {
Garet Halliday's avatar
Garet Halliday committed
	rawModuleID := string(module.CaddyModule().ID)
	dotModuleID := strings.TrimPrefix(rawModuleID, namespace)
	moduleID := strings.TrimPrefix(dotModuleID, ".")
	if rawModuleID == dotModuleID || dotModuleID == moduleID {
Garet Halliday's avatar
Garet Halliday committed
		if warnings != nil {
			*warnings = append(*warnings, caddyconfig.Warning{
				Message: fmt.Sprintf(`expected item in namespace "%s" but got "%s"`, namespace, rawModuleID),
			})
		}
		return nil
Garet Halliday's avatar
Garet Halliday committed
	}

	return caddyconfig.JSONModuleObject(
		module,
		inlineKey,
		moduleID,
		warnings,
Garet Halliday's avatar
Garet Halliday committed
	)
Garet Halliday's avatar
Garet Halliday committed
}