// Copyright 2024 Matthew Rich . All rights reserved. package folio import ( "net/url" "decl/internal/transport" "decl/internal/data" "decl/internal/identifier" "strings" ) var ( ) type ParsedURI url.URL func NewParsedURI(uri URI) *ParsedURI { return uri.Parse().(*ParsedURI) } func CastParsedURI(u *url.URL) *ParsedURI { return (*ParsedURI)(u) } func (uri *ParsedURI) URL() *url.URL { return (*url.URL)(uri) } func (uri *ParsedURI) Hostname() string { return (*url.URL)(uri).Hostname() } func (uri *ParsedURI) NewResource(document data.Document) (newResource data.Resource, err error) { if document == nil { declaration := NewDeclaration() if err = declaration.NewResourceFromParsedURI(uri); err == nil { return declaration.Attributes, err } } else { newResource, err = document.NewResourceFromParsedURI(uri) return } return } func (uri *ParsedURI) ConstructResource(res data.Resource) (err error) { if ri, ok := res.(data.ResourceInitializer); ok { err = ri.Init(uri) } else { err = res.SetParsedURI(uri) } return } func (uri *ParsedURI) Converter() (converter data.Converter, err error) { return DocumentRegistry.ConverterTypes.NewFromParsedURI(uri.URL()) } func (uri *ParsedURI) Exists() bool { return transport.Exists(uri.URL()) } func (uri *ParsedURI) ContentReaderStream() (*transport.Reader, error) { return transport.NewReader(uri.URL()) } func (uri *ParsedURI) ContentWriterStream() (*transport.Writer, error) { return transport.NewWriter(uri.URL()) } func (uri *ParsedURI) String() string { return uri.URL().String() } func (uri *ParsedURI) SetURL(url *url.URL) { *uri = *(*ParsedURI)(url) } func (uri *ParsedURI) Extension() (string, string) { return (identifier.ID)(uri.Path).Extension() } func (uri *ParsedURI) ContentType() string { var ext strings.Builder exttype, fileext := uri.Extension() if fileext == "" { return exttype } ext.WriteString(exttype) ext.WriteRune('.') ext.WriteString(fileext) return ext.String() } func (uri *ParsedURI) IsEmpty() bool { if uri == nil || (identifier.ID)(uri.String()).IsEmpty() { return true } return false }