package xrpc import ( "database/sql" "encoding/json" "log/slog" "net/http" "github.com/go-chi/chi/v5" "tangled.org/core/api/tangled" "tangled.org/core/idresolver" "tangled.org/core/knotmirror/config" ) type Xrpc struct { cfg *config.Config db *sql.DB resolver *idresolver.Resolver logger *slog.Logger } func New(logger *slog.Logger, cfg *config.Config, db *sql.DB, resolver *idresolver.Resolver) *Xrpc { return &Xrpc{ cfg, db, resolver, logger, } } func (x *Xrpc) Router() http.Handler { r := chi.NewRouter() r.Route("/xrpc", func(r chi.Router) { r.Get("/"+tangled.GitTempGetArchiveNSID, x.GetArchive) r.Get("/"+tangled.GitTempGetBlobNSID, x.GetBlob) r.Get("/"+tangled.GitTempGetBranchNSID, x.GetBranch) // r.Get("/"+tangled.GitTempGetCommitNSID, x.GetCommit) // todo // r.Get("/"+tangled.GitTempGetDiffNSID, x.GetDiff) // todo // r.Get("/"+tangled.GitTempGetEntityNSID, x.GetEntity) // todo // r.Get("/"+tangled.GitTempGetHeadNSID, x.GetHead) // todo r.Get("/"+tangled.GitTempGetTagNSID, x.GetTag) // using types.Response r.Get("/"+tangled.GitTempGetTreeNSID, x.GetTree) r.Get("/"+tangled.GitTempListBranchesNSID, x.ListBranches) // wip, unknown output r.Get("/"+tangled.GitTempListCommitsNSID, x.ListCommits) r.Get("/"+tangled.GitTempListLanguagesNSID, x.ListLanguages) r.Get("/"+tangled.GitTempListTagsNSID, x.ListTags) }) return r } func writeJson(w http.ResponseWriter, status int, response any) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(status) if err := json.NewEncoder(w).Encode(response); err != nil { return err } return nil }