an app.bsky.* indexer

use jsonEncode

Changed files
+34 -19
cmd
monarch
+34 -19
cmd/monarch/handlers.go
···
"context"
"encoding/json"
"fmt"
-
"io"
appbsky "github.com/bluesky-social/indigo/api/bsky"
"github.com/bluesky-social/indigo/atproto/syntax"
···
}
var validCollections = map[syntax.NSID]bool{
-
syntax.NSID("app.bsky.actor.profile"): true,
-
// syntax.NSID("app.bsky.feed.generator"): true,
-
// syntax.NSID("app.bsky.labeler.service"): true,
+
syntax.NSID("app.bsky.actor.profile"): true,
+
syntax.NSID("app.bsky.feed.generator"): true,
+
syntax.NSID("app.bsky.labeler.service"): true,
}
-
type bskycbor interface {
-
UnmarshalCBOR(io.Reader) error
-
}
-
-
func ActorProfile(data *[]byte) ([]byte, error) {
+
func jsonEncode(model any, data *[]byte) ([]byte, error) {
var (
-
model appbsky.ActorProfile
-
body []byte
-
err error
+
body []byte
+
err error
)
-
if err := model.UnmarshalCBOR(bytes.NewBuffer(*data)); err != nil {
-
return body, fmt.Errorf("error cbor unmarshaling: %w", err)
-
}
-
body, err = json.Marshal(model)
-
if err != nil {
-
return body, fmt.Errorf("error json unmarshaling: %w", err)
+
+
switch model.(type) {
+
case appbsky.ActorProfile:
+
var out appbsky.ActorProfile
+
out.UnmarshalCBOR(bytes.NewReader(*data))
+
body, err = json.Marshal(out)
+
+
case appbsky.FeedGenerator:
+
var out appbsky.FeedGenerator
+
out.UnmarshalCBOR(bytes.NewReader(*data))
+
body, err = json.Marshal(out)
+
+
case appbsky.LabelerService:
+
var out appbsky.LabelerService
+
out.UnmarshalCBOR(bytes.NewReader(*data))
+
body, err = json.Marshal(out)
}
+
return body, err
}
···
var body []byte
switch uri.Collection() {
case syntax.NSID("app.bsky.actor.profile"):
-
if body, err = ActorProfile(rec); err != nil {
+
if body, err = jsonEncode(appbsky.ActorProfile{}, rec); err != nil {
return fmt.Errorf("error parsing actor profile: %w", err)
+
}
+
+
case syntax.NSID("app.bsky.feed.generator"):
+
if body, err = jsonEncode(appbsky.FeedGenerator{}, rec); err != nil {
+
return fmt.Errorf("error parsing feed generator: %w", err)
+
}
+
+
case syntax.NSID("app.bsky.labeler.service"):
+
if body, err = jsonEncode(appbsky.LabelerService{}, rec); err != nil {
+
return fmt.Errorf("error parsing labeler service: %w", err)
}
}