1
0
mirror of https://github.com/IBM/fp-go.git synced 2025-08-10 22:31:32 +02:00

fix: switch internal implementation of iterator from Tuple2 to Pair

Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com>
This commit is contained in:
Dr. Carsten Leue
2024-02-12 10:33:42 +01:00
parent 51ed1693a5
commit d0e4984b60
30 changed files with 301 additions and 175 deletions

View File

@@ -18,15 +18,15 @@ package http
import (
H "net/http"
T "github.com/IBM/fp-go/tuple"
P "github.com/IBM/fp-go/pair"
)
type (
// FullResponse represents a full http response, including headers and body
FullResponse = T.Tuple2[*H.Response, []byte]
FullResponse = P.Pair[*H.Response, []byte]
)
var (
Response = T.First[*H.Response, []byte]
Body = T.Second[*H.Response, []byte]
Response = P.Head[*H.Response, []byte]
Body = P.Tail[*H.Response, []byte]
)

View File

@@ -28,12 +28,12 @@ import (
"github.com/IBM/fp-go/errors"
F "github.com/IBM/fp-go/function"
O "github.com/IBM/fp-go/option"
P "github.com/IBM/fp-go/pair"
R "github.com/IBM/fp-go/record/generic"
T "github.com/IBM/fp-go/tuple"
)
type (
ParsedMediaType = T.Tuple2[string, map[string]string]
ParsedMediaType = P.Pair[string, map[string]string]
HttpError struct {
statusCode int
@@ -45,17 +45,15 @@ type (
var (
// mime type to check if a media type matches
reJSONMimeType = regexp.MustCompile(`application/(?:\w+\+)?json`)
isJSONMimeType = regexp.MustCompile(`application/(?:\w+\+)?json`).MatchString
// ValidateResponse validates an HTTP response and returns an [E.Either] if the response is not a success
ValidateResponse = E.FromPredicate(isValidStatus, StatusCodeError)
// alidateJsonContentTypeString parses a content type a validates that it is valid JSON
validateJSONContentTypeString = F.Flow2(
ParseMediaType,
E.ChainFirst(F.Flow2(
T.First[string, map[string]string],
E.FromPredicate(reJSONMimeType.MatchString, func(mimeType string) error {
return fmt.Errorf("mimetype [%s] is not a valid JSON content type", mimeType)
}),
P.Head[string, map[string]string],
E.FromPredicate(isJSONMimeType, errors.OnSome[string]("mimetype [%s] is not a valid JSON content type")),
)),
)
// ValidateJSONResponse checks if an HTTP response is a valid JSON response
@@ -81,7 +79,7 @@ const (
// ParseMediaType parses a media type into a tuple
func ParseMediaType(mediaType string) E.Either[error, ParsedMediaType] {
m, p, err := mime.ParseMediaType(mediaType)
return E.TryCatchError(T.MakeTuple2(m, p), err)
return E.TryCatchError(P.MakePair(m, p), err)
}
// Error fulfills the error interface