an app.bsky.* indexer

different approach

Changed files
+24 -25
cmd
monarch
+24 -25
cmd/monarch/handlers.go
··· 4 4 "bytes" 5 5 "context" 6 6 "encoding/json" 7 - "errors" 8 7 "fmt" 9 8 "io" 10 9 ··· 42 41 } 43 42 44 43 var validCollections = map[syntax.NSID]bool{ 45 - syntax.NSID("app.bsky.actor.profile"): true, 46 - syntax.NSID("app.bsky.feed.generator"): true, 47 - syntax.NSID("app.bsky.labeler.service"): true, 44 + syntax.NSID("app.bsky.actor.profile"): true, 45 + // syntax.NSID("app.bsky.feed.generator"): true, 46 + // syntax.NSID("app.bsky.labeler.service"): true, 48 47 } 49 48 50 49 type bskycbor interface { 51 50 UnmarshalCBOR(io.Reader) error 52 51 } 53 52 53 + func ActorProfile(data *[]byte) ([]byte, error) { 54 + var ( 55 + model appbsky.ActorProfile 56 + body []byte 57 + err error 58 + ) 59 + if err := model.UnmarshalCBOR(bytes.NewBuffer(*data)); err != nil { 60 + return body, fmt.Errorf("error cbor unmarshaling: %w", err) 61 + } 62 + body, err = json.Marshal(model) 63 + if err != nil { 64 + return body, fmt.Errorf("error json unmarshaling: %w", err) 65 + } 66 + return body, err 67 + } 68 + 54 69 func (hs *HandlerService) HandleUpsert(ctx context.Context, repo string, rev string, path string, rec *[]byte, cid *cid.Cid, action Action) error { 55 70 uri, err := syntax.ParseATURI(fmt.Sprintf("at://%s/%s", repo, path)) 56 71 if err != nil { 57 72 return fmt.Errorf("error parsing at-uri: %w", err) 58 73 } 59 74 60 - ok := validCollections[uri.Collection()] 75 + _, ok := validCollections[uri.Collection()] 61 76 if !ok { 62 77 return nil 63 78 } 64 79 65 - var out any 80 + var body []byte 66 81 switch uri.Collection() { 67 82 case syntax.NSID("app.bsky.actor.profile"): 68 - out = appbsky.ActorProfile{} 69 - case syntax.NSID("app.bsky.feed.generator"): 70 - out = appbsky.FeedGenerator{} 71 - case syntax.NSID("app.bsky.labeler.service"): 72 - out = appbsky.LabelerService{} 73 - } 74 - 75 - model, ok := out.(bskycbor) 76 - if !ok { 77 - return errors.New("collection model cannot unmarshal CBOR") 78 - } 79 - 80 - if err := model.UnmarshalCBOR(bytes.NewReader(*rec)); err != nil { 81 - return fmt.Errorf("error cbor unmarshaling: %w", err) 82 - } 83 - 84 - body, err := json.Marshal(model) 85 - if err != nil { 86 - return fmt.Errorf("error json marshaling: %w", err) 83 + if body, err = ActorProfile(rec); err != nil { 84 + return fmt.Errorf("error parsing actor profile: %w", err) 85 + } 87 86 } 88 87 89 88 switch action {