42 lines
814 B
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)
|
|
}
|