home/internal/templateutil/urls/urls.go

42 lines
814 B
Go

package urls
import (
"context"
"errors"
"fmt"
"net/url"
"path"
"source.toby3d.me/toby3d/home/internal/domain"
"source.toby3d.me/toby3d/home/internal/site"
)
type Namespace struct {
siter site.UseCase
}
var ErrAbsURL error = errors.New("unsupported input type for AbsURL")
func New(siter site.UseCase) *Namespace {
return &Namespace{
siter: siter,
}
}
func (ns *Namespace) AbsURL(p string) (string, error) {
site, err := ns.siter.Do(context.Background(), domain.LanguageUnd)
if err != nil {
return "", fmt.Errorf("cannot fetch site root for AbsURL processing: %w", err)
}
return site.BaseURL.JoinPath(p).String(), nil
}
func (ns *Namespace) RelURL(p string) string {
return path.Clean("/" + p)
}
func (ns *Namespace) Parse(rawUrl string) (*url.URL, error) {
return url.Parse(rawUrl)
}