package httprange
import (
)
type Builder struct {
Metadata HTTPMetadataExtractor
Validator HTTPValidatorBuilder
Request HTTPRequestBuilder
Client httpclient.Client
}
func ( context.Context, string, httpclient.Client) (*BytesResource, error) {
, := url.Parse()
if != nil {
return nil,
}
return NewBuilderFromURL(, ).Build()
}
func ( *url.URL, httpclient.Client) *Builder {
if == nil {
= httpclient.DefaultClient()
}
return &Builder{
Metadata: &HTTPResponseMetadataExtractor{
Request: &HTTPRequest{
Method: http.MethodHead,
URL: ,
},
Client: ,
},
Validator: &HTTPStrongValidatorBuilder{
UseLastModified: false,
},
Request: &HTTPRequest{
URL: ,
},
Client: ,
}
}
func ( *Builder) ( context.Context) (*BytesResource, error) {
, := .Metadata.Extract()
if != nil {
return nil,
}
:= .Provide()
if .ContentLength < 0 {
return nil, errors.New("httprange: unknown resource content length")
}
if := checkUnitIsAccepted(.AcceptRanges, bytesUnit); != nil {
return nil,
}
, := .Validator.Build(, , .Client)
if != nil {
return nil,
}
return &BytesResource{
Length: .ContentLength,
Ranger: &HTTPRanger{
Request: .Request,
Client: ,
},
}, nil
}