Monorepo for Tangled
tangled.org
1package xrpcclient
2
3import (
4 "errors"
5 "net/http"
6
7 indigoxrpc "github.com/bluesky-social/indigo/xrpc"
8)
9
10var (
11 ErrXrpcUnsupported = errors.New("xrpc not supported on this knot")
12 ErrXrpcUnauthorized = errors.New("unauthorized xrpc request")
13 ErrXrpcForbidden = errors.New("forbidden xrpc request")
14 ErrXrpcFailed = errors.New("xrpc request failed")
15 ErrXrpcInvalid = errors.New("invalid xrpc request")
16)
17
18// produces a more manageable error
19func HandleXrpcErr(err error) error {
20 if err == nil {
21 return nil
22 }
23
24 var xrpcerr *indigoxrpc.Error
25 if ok := errors.As(err, &xrpcerr); !ok {
26 return ErrXrpcInvalid
27 }
28
29 switch xrpcerr.StatusCode {
30 case http.StatusNotFound:
31 return ErrXrpcUnsupported
32 case http.StatusUnauthorized:
33 return ErrXrpcUnauthorized
34 case http.StatusForbidden:
35 return ErrXrpcForbidden
36 default:
37 return ErrXrpcFailed
38 }
39}